const int mod=1000000000;//压9位
int c[520][520][32],ans[256];
void Add(int x[],int y[],int z[])//x=y+z;
{
if(y[0]<z[0])
{
int *t;
t=z;
z=y;
y=t;
}
int ly=y[0],lz=z[0];
if(lz==0)
{
x[0]=y[0];
for(int i=1;i<=x[0];++i)
x[i]=y[i];
}
else
{
for(int i=1;i<=lz;++i)
{
x[i]+=y[i]+z[i];
x[i+1]+=x[i]/mod;
x[i]%=mod;
}
for(int i=lz+1;i<=ly;++i)
{
x[i]+=y[i];
x[i+1]+=x[i]/mod;
x[i]%=mod;
}
int mid=ly+1;
while(x[mid]>=mod)
{
x[mid+1]+=x[mid]/mod;
x[mid]%=mod;
mid++;
}
x[0]=mid;
if(x[x[0]]==0)
x[0]--;
}
}
void Add1(int x[],int y[])//x+=y;
{
if(!y[0])
return;
for(int i=1;i<=y[0];++i)
{
x[i]+=y[i];
x[i+1]+=x[i]/mod;
x[i]%=mod;
}
int mid=y[0]+1;
while(x[mid]>=mod)
{
x[mid+1]+=x[mid]/mod;
x[mid]%=mod;
mid++;
}
x[0]=max(x[0],mid);
while(x[x[0]]==0)
x[0]--;
}
//求组合数
c[0][0][0]=1;
c[0][0][1]=1;
int kind=(1<<k)-1;
for(int i=1;i<=kind;++i)
{
c[i][0][0]=1;
c[i][0][1]=1;
for(int j=1;j<=i;++j)
Add(c[i][j],c[i-1][j],c[i-1][j-1]);
}
for(int i=ans[0];i>=1;--i)
{
if(i!=ans[0])//除了第一个数以外其他要高位补零
{
int mid=9-log10(ans[i]);
while(mid--)
{
cout<<0;
}
}
cout<<ans[i];
}
cout<<endl;