#include <fstream.h>
int A(int, int, int);
int B(int, int, int);
int C(int, int, int);
int D(int, int, int);
int A(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 3*n*n/4 + C(n/2, col-n/2, lin);
}
}
int B(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 3*n*n/4 + D(n/2, col, lin-n/2);
}
}
int C(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 3*n*n/4 + A(n/2, col-n/2, lin);
}
}
int D(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 3*n*n/4 + C(n/2, col, lin-n/2);
}
}
int main(){
int n, x, y;
ifstream f("fractal.in");
ofstream g("fractal.out");
f>>n>>x>>y;
f.close();
g<<A(1<<n, x, y);
g.close();
return 0;
}