#include <bits/stdc++.h>
#define fastio cin.tie(0)->sync_with_stdio(0)
using namespace std;
constexpr int M = 7;
constexpr int SZ = (1 << M) | 1;
constexpr int HA = (1 << M - 1) | 1;
unsigned char cache1[M - 1][HA][SZ][SZ];
unsigned char cache2[M - 1][SZ][SZ][SZ];
int F(int n, int x1, int y1, int x2, int y2, int d = 0) {
const int sz = 1 << n;
if (x1 == x2 && y1 == y2) return 0;
if (d == 1) { // rotate cw
return F(n, y1, sz - x1, y2, sz - x2);
}
if (d == 2) { // rotate ccw
return F(n, sz - y1, x1, sz - y2, x2);
}
if (n == 1) { // base case
if (x1 == x2 && y1 > y2) swap(y1, y2);
if (y1 == y2 && x1 > x2) swap(x1, x2);
if (x1 == x2) {
if (x1 == 1 && y1 == 0 && y2 >= 1) return 1;
return 0;
}
else {
if (y1 == 1) return x1 == 0 && x2 == 2 ? 2 : x1 == 0 || x2 == 2 ? 1 : 0;
return 0;
}
}
if (x1 == x2 && x1 > sz / 2) return F(n, sz - x1, y1, sz - x2, y2);
else if (n <= M) {
if (x1 == x2 && y1 > y2) swap(y1, y2);
if (y1 == y2 && x1 > x2) swap(x1, x2);
unsigned char& ret = x1 == x2 ? cache1[n - 2][x1][y1][y2] : cache2[n - 2][y1][x1][x2];
if ((char)ret != -1) return ret;
if (x1 == x2) {
if (x1 == sz / 2) {
return ret = y1 < sz / 2 && y2 >= sz / 2;
}
else {
if (x1 < sz / 2) {
if (y2 <= sz / 2) {
return ret = F(n - 1, x1, y1, x2, y2);
}
else if (y1 >= sz / 2) {
return ret = F(n - 1, x1, y1 - sz / 2, x2, y2 - sz / 2, 1);
}
else {
return ret = F(n - 1, x1, y1, x2, sz / 2) + F(n - 1, x1, 0, x2, y2 - sz / 2, 1);
}
}
else {
if (y2 <= sz / 2) {
return ret = F(n - 1, x1 - sz / 2, y1, x2 - sz / 2, y2);
}
else if (y1 >= sz / 2) {
return ret = F(n - 1, x1 - sz / 2, y1 - sz / 2, x2 - sz / 2, y2 - sz / 2, 2);
}
else {
return ret = F(n - 1, x1 - sz / 2, y1, x2 - sz / 2, sz / 2) + F(n - 1, x1 - sz / 2, 0, x2 - sz / 2, y2 - sz / 2, 2);
}
}
}
}
else {
if (y1 == sz / 2) {
return ret = (int)(x1 == 0) + (int)(x2 == sz);
}
else {
if (y1 < sz / 2) {
if (x2 <= sz / 2) {
return ret = F(n - 1, x1, y1, x2, y2);
}
else if (x1 >= sz / 2) {
return ret = F(n - 1, x1 - sz / 2, y1, x2 - sz / 2, y2);
}
else {
return ret = F(n - 1, x1, y1, sz / 2, y2) + F(n - 1, 0, y1, x2 - sz / 2, y2);
}
}
else {
if (x2 <= sz / 2) {
return ret = F(n - 1, x1, y1 - sz / 2, x2, y2 - sz / 2, 1);
}
else if (x1 >= sz / 2) {
return ret = F(n - 1, x1 - sz / 2, y1 - sz / 2, x2 - sz / 2, y2 - sz / 2, 2);
}
else {
return ret = F(n - 1, x1, y1 - sz / 2, sz / 2, y2 - sz / 2, 1) + F(n - 1, 0, y1 - sz / 2, x2 - sz / 2, y2 - sz / 2, 2);
}
}
}
}
}
else { // divide and conquer
if (x1 == x2 && y1 > y2) swap(y1, y2);
if (y1 == y2 && x1 > x2) swap(x1, x2);
if (x1 == x2) {
if (x1 == sz / 2) {
return y1 < sz / 2 && y2 >= sz / 2;
}
else {
if (x1 < sz / 2) {
if (y2 <= sz / 2) {
return F(n - 1, x1, y1, x2, y2);
}
else if (y1 >= sz / 2) {
return F(n - 1, x1, y1 - sz / 2, x2, y2 - sz / 2, 1);
}
else {
return F(n - 1, x1, y1, x2, sz / 2) + F(n - 1, x1, 0, x2, y2 - sz / 2, 1);
}
}
else {
if (y2 <= sz / 2) {
return F(n - 1, x1 - sz / 2, y1, x2 - sz / 2, y2);
}
else if (y1 >= sz / 2) {
return F(n - 1, x1 - sz / 2, y1 - sz / 2, x2 - sz / 2, y2 - sz / 2, 2);
}
else {
return F(n - 1, x1 - sz / 2, y1, x2 - sz / 2, sz / 2) + F(n - 1, x1 - sz / 2, 0, x2 - sz / 2, y2 - sz / 2, 2);
}
}
}
}
else {
if (y1 == sz / 2) {
return (int)(x1 == 0) + (int)(x2 == sz);
}
else {
if (y1 < sz / 2) {
if (x2 <= sz / 2) {
return F(n - 1, x1, y1, x2, y2);
}
else if (x1 >= sz / 2) {
return F(n - 1, x1 - sz / 2, y1, x2 - sz / 2, y2);
}
else {
return F(n - 1, x1, y1, sz / 2, y2) + F(n - 1, 0, y1, x2 - sz / 2, y2);
}
}
else {
if (x2 <= sz / 2) {
return F(n - 1, x1, y1 - sz / 2, x2, y2 - sz / 2, 1);
}
else if (x1 >= sz / 2) {
return F(n - 1, x1 - sz / 2, y1 - sz / 2, x2 - sz / 2, y2 - sz / 2, 2);
}
else {
return F(n - 1, x1, y1 - sz / 2, sz / 2, y2 - sz / 2, 1) + F(n - 1, 0, y1 - sz / 2, x2 - sz / 2, y2 - sz / 2, 2);
}
}
}
}
}
}
int main() {
fastio;
memset(cache1, -1, sizeof cache1);
memset(cache2, -1, sizeof cache2);
for (int n, x1, x2, y; cin >> n && n;) {
cin >> x1 >> x2 >> y;
cout << F(n, x1, y, x2, y) << '\n';
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgZmFzdGlvIGNpbi50aWUoMCktPnN5bmNfd2l0aF9zdGRpbygwKQp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3RleHByIGludCBNID0gNzsKY29uc3RleHByIGludCBTWiA9ICgxIDw8IE0pIHwgMTsKY29uc3RleHByIGludCBIQSA9ICgxIDw8IE0gLSAxKSB8IDE7CnVuc2lnbmVkIGNoYXIgY2FjaGUxW00gLSAxXVtIQV1bU1pdW1NaXTsKdW5zaWduZWQgY2hhciBjYWNoZTJbTSAtIDFdW1NaXVtTWl1bU1pdOwoKaW50IEYoaW50IG4sIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MiwgaW50IGQgPSAwKSB7Cgljb25zdCBpbnQgc3ogPSAxIDw8IG47CglpZiAoeDEgPT0geDIgJiYgeTEgPT0geTIpIHJldHVybiAwOwoJaWYgKGQgPT0gMSkgeyAvLyByb3RhdGUgY3cKCQlyZXR1cm4gRihuLCB5MSwgc3ogLSB4MSwgeTIsIHN6IC0geDIpOwoJfQoJaWYgKGQgPT0gMikgeyAvLyByb3RhdGUgY2N3CgkJcmV0dXJuIEYobiwgc3ogLSB5MSwgeDEsIHN6IC0geTIsIHgyKTsKCX0KCWlmIChuID09IDEpIHsgLy8gYmFzZSBjYXNlCgkJaWYgKHgxID09IHgyICYmIHkxID4geTIpIHN3YXAoeTEsIHkyKTsKCQlpZiAoeTEgPT0geTIgJiYgeDEgPiB4Mikgc3dhcCh4MSwgeDIpOwoJCWlmICh4MSA9PSB4MikgewoJCQlpZiAoeDEgPT0gMSAmJiB5MSA9PSAwICYmIHkyID49IDEpIHJldHVybiAxOwoJCQlyZXR1cm4gMDsKCQl9CgkJZWxzZSB7CgkJCWlmICh5MSA9PSAxKSByZXR1cm4geDEgPT0gMCAmJiB4MiA9PSAyID8gMiA6IHgxID09IDAgfHwgeDIgPT0gMiA/IDEgOiAwOwoJCQlyZXR1cm4gMDsKCQl9Cgl9CglpZiAoeDEgPT0geDIgJiYgeDEgPiBzeiAvIDIpIHJldHVybiBGKG4sIHN6IC0geDEsIHkxLCBzeiAtIHgyLCB5Mik7CgllbHNlIGlmIChuIDw9IE0pIHsKCQlpZiAoeDEgPT0geDIgJiYgeTEgPiB5Mikgc3dhcCh5MSwgeTIpOwoJCWlmICh5MSA9PSB5MiAmJiB4MSA+IHgyKSBzd2FwKHgxLCB4Mik7CgkJdW5zaWduZWQgY2hhciYgcmV0ID0geDEgPT0geDIgPyBjYWNoZTFbbiAtIDJdW3gxXVt5MV1beTJdIDogY2FjaGUyW24gLSAyXVt5MV1beDFdW3gyXTsKCQlpZiAoKGNoYXIpcmV0ICE9IC0xKSByZXR1cm4gcmV0OwoJCWlmICh4MSA9PSB4MikgewoJCQlpZiAoeDEgPT0gc3ogLyAyKSB7CgkJCQlyZXR1cm4gcmV0ID0geTEgPCBzeiAvIDIgJiYgeTIgPj0gc3ogLyAyOwoJCQl9CgkJCWVsc2UgewoJCQkJaWYgKHgxIDwgc3ogLyAyKSB7CgkJCQkJaWYgKHkyIDw9IHN6IC8gMikgewoJCQkJCQlyZXR1cm4gcmV0ID0gRihuIC0gMSwgeDEsIHkxLCB4MiwgeTIpOwoJCQkJCX0KCQkJCQllbHNlIGlmICh5MSA+PSBzeiAvIDIpIHsKCQkJCQkJcmV0dXJuIHJldCA9IEYobiAtIDEsIHgxLCB5MSAtIHN6IC8gMiwgeDIsIHkyIC0gc3ogLyAyLCAxKTsKCQkJCQl9CgkJCQkJZWxzZSB7CgkJCQkJCXJldHVybiByZXQgPSBGKG4gLSAxLCB4MSwgeTEsIHgyLCBzeiAvIDIpICsgRihuIC0gMSwgeDEsIDAsIHgyLCB5MiAtIHN6IC8gMiwgMSk7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJaWYgKHkyIDw9IHN6IC8gMikgewoJCQkJCQlyZXR1cm4gcmV0ID0gRihuIC0gMSwgeDEgLSBzeiAvIDIsIHkxLCB4MiAtIHN6IC8gMiwgeTIpOwoJCQkJCX0KCQkJCQllbHNlIGlmICh5MSA+PSBzeiAvIDIpIHsKCQkJCQkJcmV0dXJuIHJldCA9IEYobiAtIDEsIHgxIC0gc3ogLyAyLCB5MSAtIHN6IC8gMiwgeDIgLSBzeiAvIDIsIHkyIC0gc3ogLyAyLCAyKTsKCQkJCQl9CgkJCQkJZWxzZSB7CgkJCQkJCXJldHVybiByZXQgPSBGKG4gLSAxLCB4MSAtIHN6IC8gMiwgeTEsIHgyIC0gc3ogLyAyLCBzeiAvIDIpICsgRihuIC0gMSwgeDEgLSBzeiAvIDIsIDAsIHgyIC0gc3ogLyAyLCB5MiAtIHN6IC8gMiwgMik7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJCWVsc2UgewoJCQlpZiAoeTEgPT0gc3ogLyAyKSB7CgkJCQlyZXR1cm4gcmV0ID0gKGludCkoeDEgPT0gMCkgKyAoaW50KSh4MiA9PSBzeik7CgkJCX0KCQkJZWxzZSB7CgkJCQlpZiAoeTEgPCBzeiAvIDIpIHsKCQkJCQlpZiAoeDIgPD0gc3ogLyAyKSB7CgkJCQkJCXJldHVybiByZXQgPSBGKG4gLSAxLCB4MSwgeTEsIHgyLCB5Mik7CgkJCQkJfQoJCQkJCWVsc2UgaWYgKHgxID49IHN6IC8gMikgewoJCQkJCQlyZXR1cm4gcmV0ID0gRihuIC0gMSwgeDEgLSBzeiAvIDIsIHkxLCB4MiAtIHN6IC8gMiwgeTIpOwoJCQkJCX0KCQkJCQllbHNlIHsKCQkJCQkJcmV0dXJuIHJldCA9IEYobiAtIDEsIHgxLCB5MSwgc3ogLyAyLCB5MikgKyBGKG4gLSAxLCAwLCB5MSwgeDIgLSBzeiAvIDIsIHkyKTsKCQkJCQl9CgkJCQl9CgkJCQllbHNlIHsKCQkJCQlpZiAoeDIgPD0gc3ogLyAyKSB7CgkJCQkJCXJldHVybiByZXQgPSBGKG4gLSAxLCB4MSwgeTEgLSBzeiAvIDIsIHgyLCB5MiAtIHN6IC8gMiwgMSk7CgkJCQkJfQoJCQkJCWVsc2UgaWYgKHgxID49IHN6IC8gMikgewoJCQkJCQlyZXR1cm4gcmV0ID0gRihuIC0gMSwgeDEgLSBzeiAvIDIsIHkxIC0gc3ogLyAyLCB4MiAtIHN6IC8gMiwgeTIgLSBzeiAvIDIsIDIpOwoJCQkJCX0KCQkJCQllbHNlIHsKCQkJCQkJcmV0dXJuIHJldCA9IEYobiAtIDEsIHgxLCB5MSAtIHN6IC8gMiwgc3ogLyAyLCB5MiAtIHN6IC8gMiwgMSkgKyBGKG4gLSAxLCAwLCB5MSAtIHN6IC8gMiwgeDIgLSBzeiAvIDIsIHkyIC0gc3ogLyAyLCAyKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9Cgl9CgllbHNlIHsgLy8gZGl2aWRlIGFuZCBjb25xdWVyCgkJaWYgKHgxID09IHgyICYmIHkxID4geTIpIHN3YXAoeTEsIHkyKTsKCQlpZiAoeTEgPT0geTIgJiYgeDEgPiB4Mikgc3dhcCh4MSwgeDIpOwoJCWlmICh4MSA9PSB4MikgewoJCQlpZiAoeDEgPT0gc3ogLyAyKSB7CgkJCQlyZXR1cm4geTEgPCBzeiAvIDIgJiYgeTIgPj0gc3ogLyAyOwoJCQl9CgkJCWVsc2UgewoJCQkJaWYgKHgxIDwgc3ogLyAyKSB7CgkJCQkJaWYgKHkyIDw9IHN6IC8gMikgewoJCQkJCQlyZXR1cm4gRihuIC0gMSwgeDEsIHkxLCB4MiwgeTIpOwoJCQkJCX0KCQkJCQllbHNlIGlmICh5MSA+PSBzeiAvIDIpIHsKCQkJCQkJcmV0dXJuIEYobiAtIDEsIHgxLCB5MSAtIHN6IC8gMiwgeDIsIHkyIC0gc3ogLyAyLCAxKTsKCQkJCQl9CgkJCQkJZWxzZSB7CgkJCQkJCXJldHVybiBGKG4gLSAxLCB4MSwgeTEsIHgyLCBzeiAvIDIpICsgRihuIC0gMSwgeDEsIDAsIHgyLCB5MiAtIHN6IC8gMiwgMSk7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJaWYgKHkyIDw9IHN6IC8gMikgewoJCQkJCQlyZXR1cm4gRihuIC0gMSwgeDEgLSBzeiAvIDIsIHkxLCB4MiAtIHN6IC8gMiwgeTIpOwoJCQkJCX0KCQkJCQllbHNlIGlmICh5MSA+PSBzeiAvIDIpIHsKCQkJCQkJcmV0dXJuIEYobiAtIDEsIHgxIC0gc3ogLyAyLCB5MSAtIHN6IC8gMiwgeDIgLSBzeiAvIDIsIHkyIC0gc3ogLyAyLCAyKTsKCQkJCQl9CgkJCQkJZWxzZSB7CgkJCQkJCXJldHVybiBGKG4gLSAxLCB4MSAtIHN6IC8gMiwgeTEsIHgyIC0gc3ogLyAyLCBzeiAvIDIpICsgRihuIC0gMSwgeDEgLSBzeiAvIDIsIDAsIHgyIC0gc3ogLyAyLCB5MiAtIHN6IC8gMiwgMik7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJCWVsc2UgewoJCQlpZiAoeTEgPT0gc3ogLyAyKSB7CgkJCQlyZXR1cm4gKGludCkoeDEgPT0gMCkgKyAoaW50KSh4MiA9PSBzeik7CgkJCX0KCQkJZWxzZSB7CgkJCQlpZiAoeTEgPCBzeiAvIDIpIHsKCQkJCQlpZiAoeDIgPD0gc3ogLyAyKSB7CgkJCQkJCXJldHVybiBGKG4gLSAxLCB4MSwgeTEsIHgyLCB5Mik7CgkJCQkJfQoJCQkJCWVsc2UgaWYgKHgxID49IHN6IC8gMikgewoJCQkJCQlyZXR1cm4gRihuIC0gMSwgeDEgLSBzeiAvIDIsIHkxLCB4MiAtIHN6IC8gMiwgeTIpOwoJCQkJCX0KCQkJCQllbHNlIHsKCQkJCQkJcmV0dXJuIEYobiAtIDEsIHgxLCB5MSwgc3ogLyAyLCB5MikgKyBGKG4gLSAxLCAwLCB5MSwgeDIgLSBzeiAvIDIsIHkyKTsKCQkJCQl9CgkJCQl9CgkJCQllbHNlIHsKCQkJCQlpZiAoeDIgPD0gc3ogLyAyKSB7CgkJCQkJCXJldHVybiBGKG4gLSAxLCB4MSwgeTEgLSBzeiAvIDIsIHgyLCB5MiAtIHN6IC8gMiwgMSk7CgkJCQkJfQoJCQkJCWVsc2UgaWYgKHgxID49IHN6IC8gMikgewoJCQkJCQlyZXR1cm4gRihuIC0gMSwgeDEgLSBzeiAvIDIsIHkxIC0gc3ogLyAyLCB4MiAtIHN6IC8gMiwgeTIgLSBzeiAvIDIsIDIpOwoJCQkJCX0KCQkJCQllbHNlIHsKCQkJCQkJcmV0dXJuIEYobiAtIDEsIHgxLCB5MSAtIHN6IC8gMiwgc3ogLyAyLCB5MiAtIHN6IC8gMiwgMSkgKyBGKG4gLSAxLCAwLCB5MSAtIHN6IC8gMiwgeDIgLSBzeiAvIDIsIHkyIC0gc3ogLyAyLCAyKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9Cgl9Cn0KCmludCBtYWluKCkgewoJZmFzdGlvOwoJbWVtc2V0KGNhY2hlMSwgLTEsIHNpemVvZiBjYWNoZTEpOwoJbWVtc2V0KGNhY2hlMiwgLTEsIHNpemVvZiBjYWNoZTIpOwoJZm9yIChpbnQgbiwgeDEsIHgyLCB5OyBjaW4gPj4gbiAmJiBuOykgewoJCWNpbiA+PiB4MSA+PiB4MiA+PiB5OwoJCWNvdXQgPDwgRihuLCB4MSwgeSwgeDIsIHkpIDw8ICdcbic7Cgl9Cn0=