#include <iostream>
#include <fstream>
using namespace std;
ifstream f("fractal.in");
ofstream g("fractal.out");
int val;
void fract(int k, int x, int y, string directie)
{
if (!k)
g<<val;
else
{
if (directie == "sus")
{
int mijx = (1<<k)/2;
int mijy = mijx;
if (x <= mijx && y <= mijy)
{
int newx = x;
int newy = y;
fract(k-1, newx, newy, "stanga");
}
if (x <= mijx && y > mijy)
{
int newx = x;
int newy = y - (1<<(k-1));
val += (1<<(2*k - 2));
fract(k-1, newx, newy, "sus");
}
if (x > mijx && y > mijy)
{
int newx = x - (1<<(k-1));
int newy = y - (1<<(k-1));
val += 2*(1<<(2*k - 2));
fract(k-1, newx, newy, "sus");
}
if (x > mijx && y <= mijy)
{
int newx = x - (1<<(k-1));
int newy = y;
val += 3*(1<<(2*k - 2));
fract(k-1, newx, newy, "dreapta");
}
}
else if (directie == "stanga")
{
int mijx = (1<<k)/2;
int mijy = mijx;
if (x <= mijx && y <= mijy)
{
int newx = x;
int newy = y;
fract(k-1, newx, newy, "sus");
}
if (x <= mijx && y > mijy)
{
int newx = x;
int newy = y - (1<<(k-1));
val += 3 * (1<<(2*k - 2));
fract(k-1, newx, newy, "jos");
}
if (x > mijx && y > mijy)
{
int newx = x - (1<<(k-1));
int newy = y - (1<<(k-1));
val += 2*(1<<(2*k - 2));
fract(k-1, newx, newy, "stanga");
}
if (x > mijx && y <= mijy)
{
int newx = x - (1<<(k-1));
int newy = y;
val += (1<<(2*k - 2));
fract(k-1, newx, newy, "stanga");
}
}
else if (directie == "dreapta")
{
int mijx = (1<<k)/2;
int mijy = mijx;
if (x <= mijx && y <= mijy)
{
int newx = x;
int newy = y;
val += (1<<(2*k - 2));
fract(k-1, newx, newy, "dreapta");
}
if (x <= mijx && y > mijy)
{
int newx = x;
int newy = y - (1<<(k-1));
val += 2*(1<<(2*k - 2));
fract(k-1, newx, newy, "dreapta");
}
if (x > mijx && y > mijy)
{
int newx = x - (1<<(k-1));
int newy = y - (1<<(k-1));
val += 3*(1<<(2*k - 2));
fract(k-1, newx, newy, "jos");
}
if (x > mijx && y <= mijy)
{
int newx = x - (1<<(k-1));
int newy = y;
fract(k-1, newx, newy, "sus");
}
}
else if (directie == "jos")
{
int mijx = (1<<k)/2;
int mijy = mijx;
if (x <= mijx && y <= mijy)
{
int newx = x;
int newy = y;
val += (1<<(2*k - 2));
fract(k-1, newx, newy, "jos");
}
if (x <= mijx && y > mijy)
{
int newx = x;
int newy = y - (1<<(k-1));
fract(k-1, newx, newy, "stanga");
}
if (x > mijx && y > mijy)
{
int newx = x - (1<<(k-1));
int newy = y - (1<<(k-1));
val += 3*(1<<(2*k - 2));
fract(k-1, newx, newy, "dreapta");
}
if (x > mijx && y <= mijy)
{
int newx = x - (1<<(k-1));
int newy = y;
val += 2*(1<<(2*k - 2));
fract(k-1, newx, newy, "jos");
}
}
}
}
int t;
int main()
{
int x, y;
f>>t>>y>>x;
fract(t,x,y,"sus");
return 0;
}