#include <stdio.h>
#include <math.h>
/*#include "stdafx.h"*/
struct num
{
int nu[2570];
int bit;
};
int calBit(int n)
{
int bit;
double tem=0;
int i;
for(i=0;i<n;i++ )
{
tem=tem+log10(i+1);
}
bit=(int)tem + 1;
return bit;
}
void cheBit(struct num *t, int bitB)
{
int m=bitB;
while(t->nu[m-1]==0)
{
m--;
}
t->bit=m;
}
void carry(struct num *temp,int bitC)
{
do
{
temp->nu[bitC+1]+=(temp->nu[bitC]/10);
temp->nu[bitC]=(temp->nu[bitC])%10;
/* cheBit(temp, 2568);
if(bitC+1>=temp->bit)
{
temp->bit=bitC++;
}
if(temp.nu[bitC+1]>=10)
// {
// carry(temp,bitC+1);
// }*/
}while(temp->nu[++bitC]>=10);
}
void main()
{
int n,i,j,k;
/* int bit,bit_res=0,bit_a=1,bit_b=1;*/
struct num a,b,res;
int t;
int bit;
scanf("%d",&n);
for(i=0;i<2570;i++)
{
a.nu[i]=0;
b.nu[i]=0;
res.nu[i]=0;
}
bit=calBit(n);
/* int a[bit],b[bit],res[bit];*/
a.bit=1;
b.bit=1;
res.bit=1;
a.nu[0]=1;
b.nu[0]=2;
for(k=1;k<n;k++)
{
for(i=0;i<b.bit;i++)
{
for (j=0;j<a.bit;j++)
{
t=a.nu[j]*b.nu[i];
res.nu[j+i]+=(t%10);
if(res.nu[j+i]>=10)
{
carry(&res,j+i);
}
res.nu[j+i+1]+=(t/10);
if(res.nu[j+i+1]>=10)
{
carry(&res,j+i+1);
}
}
}
cheBit(&res, bit);
for(j=0;j<res.bit;j++)
{
a.nu[j]=res.nu[j];
res.nu[j]=0;
}
a.bit=res.bit;
b.nu[0]++;
if(b.nu[0]>=10)
{
carry(&b,0);
}
cheBit(&b, 5);
}
for(i=bit-1;i>=0;i--)
{
printf("%d",a.nu[i]);
}
printf("/n%d b.bit=%d/n",b.nu[1],b.bit);
printf("a.bit=%d/n",a.bit);
}