//
// #include <stdio.h>
/*可以用回溯,但是我已经不太熟悉回溯了!!!!!!!!呜呜呜
*
*/
#include <iostream>
#include <math.h>
using namespace std;
int a[9]={0};
//bool b[100]={0},c[100]={0},d[100]={0};
int sum=0;
void search(int k,int N);
int main(){
int N;
while(cin>>N && N!=0) {
search(0, N);
cout << sum<<endl;
sum=0;
for (int i = 0; i < N; ++i) {
a[i]=0;
}
}
return 0;
}
void search(int k,int N){
if(k==N){
sum++;
return ;
}
int j;
int p;
/*
* 就纯递归,每次挨个比前面的
* 如果j==k说明前面都没有问题,可以赋值
*/
for(p=0;p<N;p++) {
int ok=1;
for (j = 0; j < k ; ++j) {
if (p == a[j] || abs(j - k) == abs(a[j] - p)) {
ok=0;
break;
}
}
if (ok ) {
a[k]=p;
search(k+1,N);
}
}
}