#include<bits/stdc++.h> using namespace std; typedef vector<int>::iterator vii; int father(int k, int n) { if (n > k) abort(); int low = 1, high = k; int mid, last = (low + high) / 2; while (low <= high) { mid = (low + high) / 2; if (mid == n) return last; if (n < mid) high = mid - 1; else low = mid + 1; last = mid; } } int com_father(int k, int m, int n) { vector<int> fm, fn; while (m != ((k+1) >> 1)) { fm.insert(fm.begin(), m); m = father(k, m); } fm.insert(fm.begin(), m); while (n != ((k + 1) >> 1)) { fn.insert(fn.begin(), n); n = father(k, n); } fn.insert(fn.begin(), n); int i; for (i = 0; i < fm.size() && i < fn.size(); i++) { if (fn[i] != fm[i]) break; } return fm[i-1]; } int main() { while (true) { int k, n1, n2, n3; cin >> k >> n1 >> n2 >> n3; k = (2 << k) - 1; n1 = com_father(k, n1, n2); n2 = com_father(k, n1, n3); cout << n2 << endl; } return 0; }