#include <stdio.h>
#define BASE 10000
int n;
void mult(int a, int v[], int &n);
void mult(int v1[], int n1, int v2[], int n2, int rez[], int &rezp);
void print(int v[], int n);
void pow2(int rez[], int &rezn, int pow);
int v1[4000], v2[4000], n1, v3[4000], n3, rez[4000], nrez;
int main()
{
int i, j, np;
freopen("patrate2.in", "r", stdin);
freopen("patrate2.out", "w", stdout);
scanf("%d", &n);
v1[0] = 1;
n1 = 1;
for(i=1;i<=n;++i)
{
mult(i, v1, n1);
}
np = n*n;
pow2(v3, n3, np);
mult(v1, n1, v3, n3, rez, nrez);
print(rez, nrez);
return 0;
}
void print(int v[], int n)
{
int i, j;
printf("%d", v[n-1]);
for(i=n-2;i>=0;--i)
{
for(j=BASE/10;j>v[i];j /= 10)
{
printf("0");
}
if(v[i])
{
printf("%d", v[i]);
}
}
}
void pow2(int rez[], int &rezn, int pow)
{
int i;
rez[0] = 1;
rezn = 1;
for(i=0;i<pow;++i)
{
mult(2, rez, rezn);
}
}
void mult(int a, int v[], int &n)
{
int c = 0, i, aux;
for(i=0;i<n;++i)
{
aux = c;
c = (a * v[i] + aux) / BASE;
v[i] = (a * v[i] + aux) % BASE;
}
if(c)
{
v[i] = c;
n++;
}
}
void mult(int v1[], int n1, int v2[], int n2, int rez[], int &rezp)
{
int c, i, j, aux;
for(i=0;i<n1+n2;++i)
{
rez[i] = 0;
}
for(i=0;i<n1;++i)
{
c = 0;
for(j=0;j<n2;++j)
{
aux = c;
c = (rez[i+j] + v1[i] * v2[j] + aux) / BASE;
rez[i+j] = (rez[i+j] + v1[i] * v2[j] + aux) % BASE;
}
rez[i+j] += c;
}
if(c)
{
rez[i+j-1] = c;
rezp = n1 + n2;
}
else
{
rezp = n1 + n2 - 1;
}
}