#include <bits/stdc++.h>
using namespace std;
int upper,ans;
void dfs(int col,int maindia,int condia)//限制条件下的列,主/副对角线
{
if(col==upper) {ans++;return ;}//填满n位,可行数加1
int canput=(~(col|maindia|condia))&upper;//限制条件下的可行方案
while(canput)
{
int lowbit=canput&(-canput);//找到可行的最右列
dfs(col|lowbit,(maindia|lowbit)>>1,((condia|lowbit)<<1)&upper);//深搜
canput-=lowbit;//去除该列
}
}
int main()
{
int n;
while(cin>>n&&n)
{
ans=0;
upper=(1<<n)-1;//二进制下n位全为1
dfs(0,0,0);
cout<<ans<<endl;
}
return 0;
}