#include <cstdio>
#include <algorithm>
using namespace std;
int n;
int a[3200];
int pro[3200];
int patrat[3200];
int doi[3200];
int fnr[4];
int fact[5];
int lfact=1;
int lfnr=1;
int lpro=1;
int lpatrat=1;
struct numar
{
int nr[3200], l;
}t[3];
void suma(int nr1[3200], int nr2[3200], int &l1, int &l2)
{
int nm=max(l1, l2);
int m=l1, n=l2;
int trans=0;
for(int i=0; i<nm; i++)
{
int sum=nr1[i]+nr2[i]+trans;
trans=sum/10;
nr1[i]=sum%10;
}
if(trans!=0)
nr1[nm++]=trans;
l1=nm;
}
void prod(int nr1[3200], int nr2[3200], int l1, int l2)
{
//int nm=max(l1, l2);
int nm=0;
//int nmin=min(l1, l2);
int trans=0;
for(int i=0; i<l1; i++)
{
trans=0;
for(int j=0; j<i; j++)
t[2].nr[j]=0;
for(int j=0, un=i; j<l2; j++, un++)
{
int pr=nr1[i]*nr2[j]+trans;
trans=pr/10;
t[2].nr[un]=pr%10;
}
nm=l2+i;
if(trans)
t[2].nr[nm++]=trans;
t[2].l=nm;
suma(t[1].nr, t[2].nr, t[1].l, t[2].l);
}
}
void copiere(int a[3200], int b[3200], int &la, int &lb)
{
la=lb;
for(int i=0; i<lb; i++)
a[i]=b[i];
}
void zero(int a[3200], int &l)
{
for(int i=0; i<l; i++)
a[i]=0;
l=0;
}
int rez[3200], l;
void put(int a[3200], int p, int &nra)
{
rez[0]=1;
l=1;
while(p!=0)
{
if(p%2 ==1)
{
p--;
prod(rez, a, l, nra);
copiere(rez, t[1].nr, l, t[1].l);
zero(t[1].nr, t[1].l);
}
p/=2;
prod(a, a, nra, nra);
copiere(a, t[1].nr, nra, t[1].l);
zero(t[1].nr, t[1].l);
}
}
int main()
{
freopen("patrate2.in", "r", stdin);
freopen("patrate2.out", "w", stdout);
scanf("%d", &n);
int nr=0;
int aux=n;
while(aux)
{
a[nr++]=aux%10;
aux/=10;
}
fnr[0]=1;
pro[0]=1;
for(int i=1; i<=n; i++)
{
suma(fact, fnr, lfact, lfnr);
prod(pro, fact, lpro, lfact);
copiere(pro, t[1].nr, lpro, t[1].l);
zero(t[1].nr, t[1].l);
}
//for(int i=0; i<lpro; i++)
//printf("%d", pro[i]);
//printf("\n");
//prod(a, a, nr, nr);
//copiere(patrat, t[1].nr, lpatrat, t[1].l);
int npatr=n*n;
int ldoi=1;
doi[0]=2;
put(doi, npatr, ldoi);
prod(rez, pro, l, lpro);
copiere(pro, t[1].nr, lpro, t[1].l);
for(int i=lpro-1; i>=0; i--)
printf("%d", pro[i]);
return 0;
}