#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("patrate2.in");
ofstream fout("patrate2.out");
typedef struct numar {int nrc; int c[4005];} NUMAR;
NUMAR a,b,c,d;
int n;
void init(NUMAR &x, int val)
{
int i;
for(i=2;i<=4000;i++)
x.c[i]=0;
x.c[1]=val;
x.nrc=1;
}
void produs(NUMAR x, NUMAR y, NUMAR &z)///z=x*y
{
int i, j, t, s;
init(z,0);
for(i=1;i<=x.nrc;i++)
for(j=1;j<=y.nrc;j++)
z.c[i+j-1]+=x.c[i]*y.c[j];
t=0;
for(i=1;i<=4000;i++)
{
s=z.c[i]+t;
z.c[i]=s%10;
t=s/10;
}
i=4000;
while(z.c[i]==0)
i--;
z.nrc=i;
}
void produs_cu_scalar(NUMAR a, int x, NUMAR &b)///b=a*x;
{
init(b,0);
int i, t, s;
for(i=1;i<=a.nrc;i++)
b.c[i]=a.c[i]*x;
t=0;
for(i=1;i<=4000;i++)
{
s=b.c[i]+t;
b.c[i]=s%10;
t=s/10;
}
i=4000;
while(b.c[i]==0)
i--;
b.nrc=i;
}
void fact(int n, NUMAR &z)
{
for(int i=1;i<=n;i++)
produs_cu_scalar(z,i,z);
}
void lg_pow(NUMAR a, NUMAR &p, int n)
{
init(p,1);
while(n>0)
{
if(n%2==0)
{
produs(a,a,a);
n=n/2;
}
else
{
produs(p,a,p);
n--;
}
}
}
void afisare(NUMAR &a)
{
for(int i=a.nrc;i>=1;i--)
fout<<a.c[i];
}
int main()
{
fin>>n;
init(a,2);
init(b,2);
init(c,1);
lg_pow(a,a,n); lg_pow(b,b,n-1); lg_pow(b,b,n); fact(n,c);
produs(a,b,a);
produs(a,c,a);
afisare(a);
//x=pow(2,n)*pow(pow(2,n-1),n)*fact(n);
return 0;
}