#include<bits/stdc++.h>
using namespace std;
int n,sum=0,col[12];
bool check(int c,int r){
for(int i=0;i<r;i++){
if(col[i]==c||(abs(col[i]-c)==abs(i-r)))
return false;
}
return true;
}
void dfs(int r)
{
if(r==n){
sum++;
return;
}
for(int c=0;c<n;c++){
if(check(c,r)){
col[r]=c;
dfs(r+1);
}
}
}
int main()
{
int ans[12];
for(n=1;n<=10;n++){
memset(col,0,sizeof(col));
sum=0;
dfs(0);
ans[n]=sum;
}
while(cin>>n){
if(n==0) break;
cout<<ans[n]<<endl;
}
return 0;
}
古典的な問題、重要な点は、チェック機能が現在の場所にクイーンを配置できるかどうかを判断することです