//新生训练
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int a[20];
int cnt,n;
void f(int k) {
if(k>=n) {
cnt++;
return ;
} else {
for(int i=0; i<n; i++) {
int flag=0;
a[k]=i;
for(int j=0; j<k; j++) {
if(a[j]==a[k]||(j-a[j])==(k-a[k])||(a[k]+k)==(a[j]+j)) {
flag=1;
break;
}
}
if(flag==0) {
f(k+1);
}
}
}
}
int main() {
while(cin>>n) {
if(n==0)
break;
cnt=0;
f(0);
cout << cnt << endl;
}
return 0;
}
//笔者在运行此代码的时候样例没问题,但是显示超时,但因为题中仅仅说的是 1 到 10 ,所以就用此代码来计算,另外新编了一个面向结果编程的代码 hwh ……
~~~//仅当笔者个人备忘录使用。