#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<set>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
#include<iostream>
#include<string>
#include<cmath>
#define N 1010
#define FOR(i,a,b) for(i=(a);i<=(b);i++)
#define ROF(i,a,b) for(i=(a);i>=(b);i--)
typedef long long LL;
using namespace std;
int n;
struct bignum
{
int Len,a[N];
void init(){memset(a,0,sizeof(a));Len=0;}
bignum m3()
{
bignum res,tmp=*this;int i;
res.init();res.Len=tmp.Len;
FOR(i,1,res.Len)
{
res.a[i]+=tmp.a[i]*3;
res.a[i+1]+=res.a[i]/10;
res.a[i]%=10;
}
if (res.a[res.Len+1]>0) res.Len++;
return res;
}
bignum operator -(const bignum B)const
{
int i;bignum res,A=*this;res.init();
FOR(i,1,Len)
{
if (A.a[i]<B.a[i])
{
A.a[i+1]-=1;
A.a[i]+=10;
}
res.a[i]=A.a[i]-B.a[i];
}
res.Len=Len;
while (res.a[res.Len]==0&&res.Len>1) res.Len--;
return res;
}
bignum a2()
{
bignum res=*this;
res.a[1]+=2;int i=1;
while (res.a[i]>9)
{
res.a[i+1]+=res.a[i]/10;
res.a[i]%=10;
i++;
}
if (res.a[res.Len+1]>0) res.Len++;
return res;
}
}g[110];
bignum change(int x)
{
bignum res;res.init();
if (x==0) res.Len=1;
else
{
while (x)
{
res.a[++res.Len]=x%10;
x/=10;
}
}
return res;
}
void Main()
{
g[0]=change(0);g[1]=change(1);g[2]=change(5);g[3]=change(16);
int i;
if (n<=3)
{
ROF(i,g[n].Len,1) printf("%d",g[n].a[i]);printf("\n");
return;
}
FOR(i,4,n)
{
g[i]=g[i-1].m3()-g[i-2];
g[i]=g[i].a2();
}
ROF(i,g[n].Len,1) printf("%d",g[n].a[i]);printf("\n");
}
int main()
{
scanf("%d",&n); Main();
}