#include <fstream.h>
long int A(long int, int, int);
long int B(long int, int, int);
long int C(long int, int, int);
long int D(long int, int, int);
long A(long int n, int col, int lin){
if(n){
int c;
if(col <= n/2)
if(lin <= n/2) c = 1;
else c = 2;
else
if(lin<=n/2) c = 4;
else c = 3;
if(c==1) return B(n/2, col, lin);
if(c==2) return n*n/4 + A(n/2, col, lin-n/2);
if(c==3) return n*n/2 + A(n/2, col-n/2, lin-n/2);
if(c==4) return (unsigned long)3*n*n/4 + C(n/2, col-n/2, lin);
}
}
long int B(long int n, int col, int lin){
if(n){
int c;
if(col <= n/2)
if(lin <= n/2) c = 1;
else c = 4;
else
if(lin<=n/2) c = 2;
else c = 3;
if(c==1) return A(n/2, col, lin);
if(c==2) return n*n/4 + B(n/2, col-n/2, lin);
if(c==3) return n*n/2 + B(n/2, col-n/2, lin-n/2);
if(c==4) return (unsigned long)3*n*n/4 + D(n/2, col, lin-n/2);
}
}
long int C(long int n, int col, int lin){
if(n){
int c;
if(col <= n/2)
if(lin <= n/2) c = 3;
else c = 2;
else
if(lin<=n/2) c = 4;
else c = 1;
if(c==1) return D(n/2, col-n/2, lin-n/2);
if(c==2) return n*n/4 + C(n/2, col, lin-n/2);
if(c==3) return n*n/2 + C(n/2, col, lin);
if(c==4) return (unsigned long)3*n*n/4 + A(n/2, col-n/2, lin);
}
}
long int D(long int n, int col, int lin){
if(n){
int c;
if(col <= n/2)
if(lin <= n/2) c = 3;
else c = 4;
else
if(lin<=n/2) c = 2;
else c = 1;
if(c==1) return C(n/2, col-n/2, lin-n/2);
if(c==2) return n*n/4 + D(n/2, col-n/2, lin);
if(c==3) return n*n/2 + D(n/2, col, lin);
if(c==4) return (unsigned long)3*n*n/4 + B(n/2, col, lin-n/2);
}
}
int main(){
long int n;
int x, y;
ifstream f("fractal.in");
ofstream g("fractal.out");
f>>n>>x>>y;
f.close();
g<<A((long)1<<n, x, y);
g.close();
return 0;
}