#include <stdio.h>

#define MAX 10

int count = 0,count1 = 0;
int array[MAX][MAX];

void initial(){
int i,j;
for(i = 0;i < MAX;i++)
	for(j = 0;j < MAX;j++)
		array[i][j] = 0;
}

void print(){
int i,j;
for(i = 0;i < MAX;i++){
	for(j = 0;j < MAX;j++)
		printf("[%2d]",array[i][j]);
	printf("\n");
	}
printf("\n");
}

int can_be_put(int x,int y){
int i,j;
int temp = 0;

for(i = 0;i < MAX;i++)
	if(array[x][i] != 0 || array[i][y] != 0)
		temp++;
for(i = x,j = y;i < MAX && j < MAX;i++,j++)
	if(array[i][j] != 0)
		temp++;
for(i = x,j = y;i >= 0 && j < MAX;i--,j++)
	if(array[i][j] != 0)
		temp++;
for(i = x,j = y;i < MAX && j >= 0;i++,j--)
	if(array[i][j] != 0)
		temp++;
for(i = x,j = y;i >= 0 && j >= 0;i--,j--)
	if(array[i][j] != 0)
		temp++;

if(temp == 0)
	return 1;
else
	return 0;
}

void put_queen(int x,int y){
int i,j;
if(can_be_put(x,y)){
	count++;
	array[x][y] = count;
	if(count == MAX){
		count1++;
		print();
		}
	else{
		for(j = 0;j < MAX;j++)
			put_queen((x + 1),j);
		}
	count--;
	array[x][y] = 0;
	}
}

int main(){
int i;
initial();
for(i = 0;i < MAX;i++)
	put_queen(0,i);
printf("\n%d",count1);
return 0;
}

