#include <stdio.h>
#define maxn 16
int K, _x, _y, res;
int c1[4] = {1, 4, 3, 2}, c2[4] = {1, 2, 3, 4}, c3[] = {1, 2, 3, 4}, c4[] = {3, 2, 1, 4};
int v[4] = {1, 2, 3, 4};
int pow2[] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768};
FILE *fin = fopen("fractal.in", "rt"), *fout = fopen("fractal.out", "wt");
void rec(int k, int x, int y)
{
int i;
fprintf(fout, "%d %d %d\n", k, x, y);
fprintf(fout, "%d %d %d %d\n", v[0], v[1], v[2], v[3]);
if (k == 0) { res++; return; }
if (x <= pow2[k - 1] && y <= pow2[k - 1])
{
res += (v[0] - 1) * pow2[k];
for (i = 0; i < 4; i++) v[c1[i] - 1] = i + 1;
rec(k - 1, x, y);
}
if (x > pow2[k - 1] && y <= pow2[k - 1])
{
res += (v[1] - 1) * pow2[k];
for (i = 0; i < 4; i++) v[c2[i] - 1] = i + 1;
rec(k - 1, x - pow2[k - 1], y);
}
if (x <= pow2[k - 1] && y > pow2[k - 1])
{
res += (v[2] - 1) * pow2[k];
for (i = 0; i < 4; i++) v[c3[i] - 1] = i + 1;
rec(k - 1, x, y - pow2[k - 1]);
}
if (x > pow2[k - 1] && y > pow2[k - 1])
{
res += (v[3] - 1) * pow2[k];
for (i = 0; i < 4; i++) v[c4[i] - 1] = i + 1;
rec(k - 1, x - pow2[k - 1], y - pow2[k - 1]);
}
}
int main()
{
fscanf(fin, "%d %d %d", &K, &_x, &_y);
int aux = _x, _x = _y; _y = aux;
rec(K, _x, _y);
fprintf(fout, "%d", res - 1);
fclose(fin), fclose(fout);
return 0;
}