#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, curent = 1, poz = 1, part[4000], rezpart[4000], j;
rez[0] = 1;
rezn = 1;
part[0] = 2;
int partn = 1;
int rezpartn;
while(pow)
{
if(pow %2 == 1)
{
for(i=curent;i<poz;++i)
{
mult(part, partn, part, partn, rezpart, rezpartn);
for(j=0;j<rezpartn;++j)
{
part[j] = rezpart[j];
}
partn = rezpartn;
}
curent = poz;
mult(part, partn, rez, rezn, rezpart, rezpartn);
for(j=0;j<rezpartn;++j)
{
rez[j] = rezpart[j];
}
rezn = rezpartn;
}
pow /= 2;
poz++;
}
}
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;
}
}