int main()
{
int cur,n,i,j,k,m;
int dp[2][35];
while(scanf("%d",&n)!=EOF)
{
if(n==0)
{
puts("1");continue;
}
if(n==1)
{
puts("0");continue;
}
if(n==-1)
break;
m=3;
memset(dp,0,sizeof(dp));
cur=0;
dp[cur][(1<<m)-1]=1;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
cur=1-cur;
memset(dp[cur],0,sizeof(dp[cur]));
for(k=0;k<(1<<m);k++)
{
if(k&(1<<(m-1)))//不放,上层必须为1才允许不放
dp[cur][(k<<1)^(1<<m)]+=dp[1-cur][k];//km-1 k3 k2 k1 0
if(i!=1&&!(k&(1<<(m-1))))//上放,i不能是顶层,且上层必须没放
dp[cur][(k<<1)+1]+=dp[1-cur][k];
if(j!=1&&!(k&1)&&(k&(1<<(m-1))))//左放,低位必须为0,高位必须为1
dp[cur][(k<<1)^3^(1<<m)]+=dp[1-cur][k];
}
}
}
printf("%d\n",dp[cur][(1<<m)-1]);
}
return 0;
}
{
int cur,n,i,j,k,m;
int dp[2][35];
while(scanf("%d",&n)!=EOF)
{
if(n==0)
{
puts("1");continue;
}
if(n==1)
{
puts("0");continue;
}
if(n==-1)
break;
m=3;
memset(dp,0,sizeof(dp));
cur=0;
dp[cur][(1<<m)-1]=1;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
cur=1-cur;
memset(dp[cur],0,sizeof(dp[cur]));
for(k=0;k<(1<<m);k++)
{
if(k&(1<<(m-1)))//不放,上层必须为1才允许不放
dp[cur][(k<<1)^(1<<m)]+=dp[1-cur][k];//km-1 k3 k2 k1 0
if(i!=1&&!(k&(1<<(m-1))))//上放,i不能是顶层,且上层必须没放
dp[cur][(k<<1)+1]+=dp[1-cur][k];
if(j!=1&&!(k&1)&&(k&(1<<(m-1))))//左放,低位必须为0,高位必须为1
dp[cur][(k<<1)^3^(1<<m)]+=dp[1-cur][k];
}
}
}
printf("%d\n",dp[cur][(1<<m)-1]);
}
return 0;
}