#include <bits/stdc++.h>
using namespace std;
const int N=8;
int chess[N][N];
int cnt = 0;
void init() {
for (int i=0; i<N; ++i) {
for (int j=0; j<N; ++j)
chess[i][j] = 0;
}
}
void print() {
for (int i=0; i<N; ++i) {
for (int j=0; j<N; ++j) {
cout << chess[i][j];
if (j != N-1) cout << " ";
}
cout << endl;
}
cout << endl;
}
bool check(int row, int col) {
//(1)判断同列是否有queen
for (int i=0; i<N; ++i) {
if (i!=row && chess[i][col]) return false;
}
//(2)判断同行是否有queen
for (int i=0; i<N; ++i) {
if (i!=col && chess[row][i]) return false;
}
//(3)检查左上对角线
for (int i=row-1, j=col-1; i>=0 && j>=0; --i, --j) {
if (chess[i][j]) return false;
}
//(4)检查右上对角线
for (int i=row-1, j=col+1; i>=0 && j<=N-1; i--, j++) {
if (chess[i][j]) return false;
}
return true;
}
void dfs(int row) {
if (row == N) {
print();
cnt ++;
return;
} else {
for (int i=0; i<N; ++i) {
chess[row][i] = 1;
if (check(row, i)) dfs(row + 1);
chess[row][i] = 0;
}
}
}
int main() {
init();
dfs(0);
cout << cnt << endl;
return 0;
}