#include <bits/stdc++.h>

using namespace std;
const int MAXN=3e5+5;
int arr[MAXN];
int dp[MAXN];
struct mx
{
    int x=0,y=0;
    void update(int r)
    {
        if(r>x)swap(r,x);
        if(r>y)swap(r,y);
    }
};

int main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    //freopen(".in","r",stdin);
    int n;
    cin>>n;
    for(int i=0; i<(1<<n); i++)
        cin>>arr[i];
    for(int i=1; i<(1<<n); i++)
    {
        dp[i]=dp[i-1];
        mx temp;
        for(int sm=i; sm>0; sm=i&(sm-1))
            temp.update(arr[sm]);
        temp.update(arr[0]);
        dp[i]=max(dp[i],temp.x+temp.y);
        cout<<dp[i]<<'\n';
    }
    return 0;
}
