//一、
#include<iostream>
#include<cstring>
using namespace std;
int main(){
int n,ans[22];
memset(ans,0,sizeof(ans));//
ans[3]=4;ans[4]=6;ans[7]=12;ans[8]=40;ans[11]=171;ans[12]=410; ans[15] = 1896;ans[16]=5160;ans[19]=32757;ans[20]=59984;
while(cin>>n)
cout<<ans[n]<<endl;
return 0;
}
//二、
#include <iostream>
using namespace std;
class Triangle {
friend int compute(int);
private:
void Backtrack(int t);
int n, //第一行的符号个数
half, //n*(n+1)/4
count, //当前‘+’个数
**p; //幸运三角形矩阵
long sum; //已找到的幸运三角形个数
};
void Triangle::Backtrack(int t) {
if((count>half)||(t*(t-1)/2-count>half))//当搜索到此层时,如果‘+‘或’-‘有大于总符号的一半,就退出;
return ;
int i,j;
if(t>n)
sum++;
else for(i=0;i<2;i++) {
p[1][t]=i;
count+=i;
for(j=2;j<=t;j++) {
p[j][t-j+1]=p[j-1][t-j+1]^p[j-1][t-j+2]; //由p[1][t]的值退出t左斜下方的符号;
count+=p[j][t-j+1]; //如果为1 则
count++;
} Backtrack(t+1);
for(j=2;j<=t;j++)
count-=p[j][t-j+1];
count-=i;
}
}
int compute(int n)//计算节点为n的幸运三角形的个数;
{ Triangle x;
x.n=n;
x.count=0;
x.half=n*(n+1)/2;
x.sum=0;
if(x.half%2==1)//如果三角形中总符号数为奇数,则返回0;
return 0;
x.half=x.half/2;
int i,j;
int **p=new int *[n+1];
for(i=0;i<=n;i++)
p[i]=new int [n+1];
for(i=0;i<=n;i++)
for(j=0;j<=n;j++)
p[i][j]=0; x.p=p;
x.Backtrack(1);
return x.sum;
}
int main() {
int n;
while(cin>>n) {
int res=compute(n);
cout<<res<<endl;
}
return 0;
}