#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#define NMAX (100000 + 3)
using namespace std;
bool In_interval(int x, int a, int b) {
return (a <= x && x <= b) || (b <= x && x <= b);
}
int Modulus(int x) {
if (x < 0) {
return -x;
}
return x;
}
int Add(int cadr, int x_min, int x_max, int y_min, int y_max) {
int square_size = ((Modulus(x_max - x_min) + 1) * (Modulus(x_max - x_min) + 1)) / 4;
if (y_min < y_max) {
if (x_min < x_max) {
return square_size * (cadr - 1);
} else {
return square_size * (4 - cadr);
}
} else {
if (x_min < x_max) {
return square_size * (4 - cadr);
} else {
return square_size * (cadr - 1);
}
}
}
int DI(int x, int y, int x_min, int x_max, int y_min, int y_max) {
if (Modulus(x_max - x_min) == 1) {
if (x == x_min && y == y_min) {
return Add(1, x_min, x_max, y_min, y_max);
} else {
if (x == x_min && y == y_max) {
return Add(2, x_min, x_max, y_min, y_max);
} else {
if (x == x_max && y == y_max) {
return Add(3, x_min, x_max, y_min, y_max);
} else {
return Add(4, x_min, x_max, y_min, y_max);
}
}
}
}
int x_m = (x_max + x_min) / 2;
if (x_min > x_max) {
++x_m;
}
int y_m = (y_max + y_min) / 2;
if (y_min > y_max) {
++y_m;
}
//cout << x << " " << y << " " << x_min << " " << x_m << " " << x_max << " " << y_min << " " << y_m << " " << y_max << " ";
if (In_interval(x, x_min, x_m) && In_interval(y, y_min, y_m)) {
//cout << 1 << " " << Add(1, x_min, x_max, y_min, y_max) << " " << '\n';
return Add(1, x_min, x_max, y_min, y_max) + DI(y, x, y_m, y_min, x_min, x_m);
} else {
if (In_interval(x, x_min, x_m) && In_interval(y, y_m, y_max)) {
//cout << 2 << " " << Add(2, x_min, x_max, y_min, y_max) << " " << '\n';
return Add(2, x_min, x_max, y_min, y_max) + DI(x, y, x_min, x_m, y_m, y_max);
} else {
if (In_interval(x, x_m, x_max) && In_interval(y, y_m, y_max)) {
//cout << 3 << " " << Add(3, x_min, x_max, y_min, y_max) << " " << '\n';
return Add(3, x_min, x_max, y_min, y_max) + DI(x, y, x_m, x_max, y_m, y_max);
} else {
//cout << 4 << " " << Add(4, x_min, x_max, y_min, y_max) << " " << '\n';
return Add(4, x_min, x_max, y_min, y_max) + DI(y, x, y_min, y_m, x_max, x_m);
}
}
}
}
int main() {
ifstream f("fractal.in");
ofstream g("fractal.out");
int k, x, y, length;
f >> k >> x >> y;
for (length = 1; k > 0; length *= 2, --k);
g << DI(x, y, 1, length, 1, length);
return 0;
}