#include <bits/stdc++.h>
using namespace std;
ifstream f("fractal.in");
ofstream g("fractal.out");
int k, x, y, solution;
/*
int Hilbert(int prev, int k, int x, int y)
{
if(k == 0)
return 0;
int size = pow(2, k - 1);
// 1 4
// 2 3
if(prev == 2 || prev == 3)
{
int val = pow(2, 2 * (k - 1));
// 1
if(x <= size && y <= size)
return Hilbert(1, k - 1, x, y);
else // 4
if(x <= size && y > size)
return val * 3 + Hilbert(4, k - 1, x, y - size);
else // 2 // 1
if(x > size && y <= size)
return val + Hilbert(2, k - 1, x - size, y);
else // 3
if(x > size && y > size)
return val * 2 + Hilbert(3, k - 1, x - size, y - size);
}
else
// 1 2
// 4 3
if(prev == 1)
{
int val = pow(2, 2 * (k - 1));
// 1
if(x <= size && y <= size)
return Hilbert(1, k - 1, x, y);
else // 2
if(x <= size && y > size)
return val + Hilbert(2, k - 1, x, y - size);
else // 4
if(x > size && y <= size)
return val * 3 + Hilbert(4, k - 1, x - size, y);
else // 3
if(x > size && y > size)
return val * 2 + Hilbert(3, k - 1, x - size, y - size);
}
else
// 3 4
// 2 1
{
int val = pow(2, 2 * (k - 1));
// 3
if(x <= size && y <= size)
return Hilbert(3, k - 1, x, y);
else // 4
if(x <= size && y > size)
return val * 3 + Hilbert(4, k - 1, x, y - size);
else // 2
if(x > size && y <= size)
return val + Hilbert(2, k - 1, x - size, y);
else // 1
if(x > size && y > size)
return val * 2 + Hilbert(1, k - 1, x - size, y - size);
}
}
*/
void Hilbert(int k, int x, int y)
{
int size;
if(k > 0)
{
--k;
size = pow(2, k);
if(x <= size && y <= size)
Hilbert(k, y, x);
else
if(x > size && y <= size)
{
solution += size * size;
Hilbert(k, x - size, y);
}
else
if(x > size && y > size)
{
solution += 2 * size * size;
Hilbert(k, x - size, y - size);
}
else
{
solution += 3 * size * size;
Hilbert(k, 2 * size + 1 - y, size - x + 1);
}
}
}
int main()
{
f >> k >> x >> y;
Hilbert(k, y, x);
g << solution;
return 0;
}