#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int a[11],n,countt;//a[]括号里代表所在行
bool ok(int x)
{
for(int i=1;i<x;i++)
if(a[x]==a[i]||abs(a[i]-a[x])==x-i)//判断是否同列和同一斜线
return 0;
return 1;
}
void dfs(int x)
{
for(int i=1;i<=n;i++)
{
a[x]=i;
if(ok(x))
{
if(x==n)countt++;
else dfs(x+1);
}
}
}
int main()
{
int i,sum[11],m;
for(i=0;i<11;i++)
{
countt=0;
n=i;
dfs(1);
sum[i]=countt;
}//需要打表处理,不然会超时
while(scanf("%d",&m)&&m)
printf("%d\n",sum[m]);
return 0;
}
#include<stdlib.h>
#include<math.h>
int a[11],n,countt;//a[]括号里代表所在行
bool ok(int x)
{
for(int i=1;i<x;i++)
if(a[x]==a[i]||abs(a[i]-a[x])==x-i)//判断是否同列和同一斜线
return 0;
return 1;
}
void dfs(int x)
{
for(int i=1;i<=n;i++)
{
a[x]=i;
if(ok(x))
{
if(x==n)countt++;
else dfs(x+1);
}
}
}
int main()
{
int i,sum[11],m;
for(i=0;i<11;i++)
{
countt=0;
n=i;
dfs(1);
sum[i]=countt;
}//需要打表处理,不然会超时
while(scanf("%d",&m)&&m)
printf("%d\n",sum[m]);
return 0;
}