/题意自己看,不会度娘
#include <stdio.h>
#include <string.h>
#include <math.h>
int qizi[20];
int flag[20];
int n;
int num;
int judge(int hang)
{for(int i=1;i<hang;i++)//循环行{if(qizi[hang]==qizi[i]||abs((hang-i))==abs(qizi[hang]-qizi[i]))//查看是否同列或者同斜率,第二个条件没看懂的自己算下就懂了 return 0; }return 1;
}
int DFS(int hang)
{if(hang==n+1)num++;//当行为n+1时,说明到达边界 else{for(int i=1;i<=n;i++)//列 {qizi[hang]=i;//qizi数组表示为当前坐标if(judge(hang)){DFS(hang+1);//下下一行的棋 } }}
}
void mmp(int n)
{DFS(1);
}
int main(int argc, char *argv[])
{
for(n=1;n<=10;n++)
{num=0;mmp(n); flag[n]=num;
}//打表
int k;
while(scanf("%d",&k)!=EOF)
{if(k==0)break;printf("%d\n",flag[k]);
}return 0;
}
//Start-ZJ