#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()
{
  //freopen("t.in","r",stdin);
  //freopen("t.out","w",stdout);
  scanf("%d",&n); Main();
}