#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define N 100
int queen[N]={0};
int sum=0;
int max;//保存从文件中读入的棋盘宽度
FILE *fp1,*fp2;
bool place(int n){//此函数用来判断当前行是否可以放置皇后
 for(int i=0;i<n;i++){
    if(queen[i]==queen[n]||abs(n-i)==abs(queen[i]-queen[n]))
       return false;
 }
 return true;
}
void NQueen(int n){//n皇后回溯问题
     int i;
  for(i=0;i<max;i++){
     queen[n]=i;
  if(place(n)){
     if(n==max-1)sum++;//如果到结尾,则解的个数加一
     else NQueen(n+1);//如果可以放置,且没到结尾则向下循环
  }
  }
}
int main(){
 fp1=fopen("5.in","r");
 fp2=fopen("5.out","w");
 fscanf(fp1,"%d",&max);
    NQueen(0);
 fprintf(fp2,"%d",sum);
return 0;
}