#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;
}