#include<iostream>
using namespace std;
#include<math.h>
#include<cstring>
int x[15],y[15],z[15],n,k;
bool isRQ(int m)
{
int i=1;
while(i<m)
{
if(x[i]==x[m]||abs(x[i]-x[m])==abs(i-m))
return false;
i++;
}
return true;
}
void dfsplay(int m)
{
int i;
if(m==k+1)
{
n++;
return;
}
for(i=1;i<=k;i++)
{
x[m]=i;
if(isRQ(m)&&y[m]==0)
{
y[m]=1;
dfsplay(m+1);
y[m]=0;
}
}
}
int main()
{
for(k=1;k<=10;k++)
{
memset(x,0,sizeof(x));
memset(y,0,sizeof(y));
n=0;
dfsplay(1);
z[k]=n;
}
while(cin>>k)
{
if(k==0) break;
cout<<z[k]<<endl;
}
return 0;
}