#include <stdio.h>
#include <math.h>
using namespace std;
FILE *fin, *fout;
int k, x, y;
int inRange1(int a, int k)
{
return (a >= 1) && (a <= pow(2, k-1));
}
int inRange2(int a, int k)
{
return (a >= (pow(2, k-1)+1)) && (a <= pow(2, k));
}
int HilbertSize(int k)
{
return (int)(pow(4, k) - 1);
}
int divide(int k, int x, int y)
{
if(k == 1)
{
if(x == 1 && y == 1) return 0;
if(x == 1 && y == 2) return 1;
if(x == 2 && y == 2) return 2;
if(x == 2 && y == 1) return 3;
}
else
{
//Check for square
//Stanga sus
if(inRange1(x, k) && inRange1(y, k))
{
return divide(k-1, y, x);
}
//Stanga jos
else if(inRange1(x, k) && inRange2(y, k))
{
return HilbertSize(k-1) + 1 + divide(k-1, x, y - pow(2, k-1));
}
//Dreapta jos
else if(inRange2(x, k) && inRange2(y, k))
{
return 2*HilbertSize(k-1) + 2 + divide(k-1, x - pow(2, k-1), y - pow(2, k-1));
}
//Dreapta sus
else if(inRange2(x, k) && inRange1(y, k))
{
return 4*HilbertSize(k-1) + 3 - divide(k-1, y, pow(2, k) - x + 1);
}
}
}
int main()
{
fin = fopen("fractal.in", "r");
fout = fopen("fractal.out", "w");
fscanf(fin, "%d %d %d", &k, &x, &y);
fprintf(fout, "%d", divide(k, x, y));
return 0;
}