#include<stdio.h>
long long n,c,l;
long long dist1(long long m,long long l,long long c);//sus
long long dist2(long long m,long long l,long long c);//stanga
long long dist3(long long m,long long l,long long c);//dreapta
long long dist4(long long m,long long l,long long c);//jos
int main()
{
freopen("fractal.in","r",stdin);
freopen("fractal.out","w",stdout);
scanf("%lld%lld%lld",&n,&c,&l);
long long di=dist1(n,l,c);
printf("%lld\n",di);
return 0;
}
long long dist1(long long m,long long l,long long c)//sus
{long long ll=(1<<(m)),x;
if(!m)return 0;
if(l>ll/2)
{l%=(ll/2);
x=0;
if(c>(ll/2))x=1;
c%=(ll/2);
if(!c)c+=(ll+2);
return (dist1(m-1,l,c)+(1<<(2*m-2))*(x+1));}
if(c<=ll/2)
return dist2(m-1,l,c);
c-=(ll/2);
return (dist3(m-1,l,c)+(1<<(2*m-2))*3);
}
long long dist2(long long m,long long l,long long c)//stanga
{long long ll=(1<<(m)),x;
if(!m)return 0;
if(c>ll/2)
{c%=(ll/2);
x=0;
if(l>(ll/2))x=1;
l%=(ll/2);
if(!l)l+=(ll+2);
return (dist2(m-1,l,c)+(1<<(2*m-2))*(x+1));}
if(l<=ll/2)
return dist1(m-1,l,c);
l-=(ll/2);
return (dist4(m-1,l,c)+(1<<(2*m-2))*3);
}
long long dist3(long long m,long long l,long long c)//dreapta
{long long ll=(1<<(m)),x;
if(!m)return 0;
if(c<=ll/2)
{x=0;
if(l<=(ll/2))x=1;
l%=(ll/2);
if(!l)l+=(ll+2);
return (dist4(m-1,l,c)+(1<<(2*m-2))*(x+1));}
c-=(ll/2);
if(l<=ll/2)
return (dist1(m-1,l,c)+(1<<(2*m-2))*3);
l-=(ll/2);
return dist4(m-1,l,c);
}
long long dist4(long long m,long long l,long long c)//jos
{long long ll=(1<<(m)),x;
if(!m)return 0;
if(l<=ll/2)
{x=0;
if(c<=(ll/2))x=1;
c%=(ll/2);
if(!c)c+=(ll+2);
return (dist4(m-1,l,c)+(1<<(2*m-2))*(x+1));}
l-=(ll/2);
if(c<=ll/2)
return (dist2(m-1,l,c)+(1<<(2*m-2))*3);
c-=(ll/2);
return dist3(m-1,l,c);
}