#include <set>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
using ll = long long;

const int maxn = 3e5 + 5;
int n, a[maxn], ans[maxn];
set <pair <int, int> > S[maxn];

int main() {
	scanf("%d", &n);
	for (int i = 0; i < (1 << n); i ++) {
		scanf("%d", a + i);
		S[i] = {make_pair(a[i], i)};
	}
	for (int i = 0; i < n; i ++)
		for (int j = 0; j < (1 << n); j ++) {
			if (j & (1 << i)) continue;
			int k = j | (1 << i);
			for (pair <int, int> x:S[j])
				S[k].insert(x);
			while (S[k].size() > 2)
				S[k].erase(S[k].begin());
		}
	for (int i = 1; i < (1 << n); i ++) {
		ans[i] = 0;
		for (pair <int, int> x:S[i])
			ans[i] += x.first;
		ans[i] = max(ans[i], ans[i - 1]);
		printf("%d\n", ans[i]);
	}
	return 0;
}
