using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Competitive
{
    internal class Solution
    {
        public int _N;
        public int N;
        public int[] A;
        public int[] V1, I1; // iまでの1番目に大きい数, index
        public int[] V2, I2; // iまでの2番目に大きい数, index

        public void Run()
        {
            _N = Input.ReadInt();
            N = 1;
            for (int i = 0; i < _N; i++)
                N *= 2;
            A = Input.ReadIntArray();

            V1 = new int[N];
            V2 = new int[N];
            I1 = new int[N];
            I2 = new int[N];

            for (int i = 0; i < N; i++)
            {
                int v1 = A[i];
                int i1 = i;
                int v2 = -1;
                int i2 = -1;

                for (int b = 0; b <= 20; b++)
                {
                    int ii = (1 << b) ^ i;
                    if (i > ii)
                    {
                        // update
                        if (V1[ii] >= v1 && I1[ii] != i1 && I1[ii] != i2)
                        {
                            v2 = v1;
                            i2 = i1;
                            v1 = V1[ii];
                            i1 = I1[ii];
                        }
                        else if (V1[ii] >= v2 && I1[ii] != i1 && I1[ii] != i2)
                        {
                            v2 = V1[ii];
                            i2 = I1[ii];
                        }

                        if (V2[ii] >= v1 && I2[ii] != i1 && I2[ii] != i2)
                        {
                            v2 = v1;
                            i2 = i1;
                            v1 = V2[ii];
                            i1 = I2[ii];
                        }
                        else if (V2[ii] >= v2 && I2[ii] != i1 && I2[ii] != i2)
                        {
                            v2 = V2[ii];
                            i2 = I2[ii];
                        }
                    }
                }

                V1[i] = v1;
                V2[i] = v2;
                I1[i] = i1;
                I2[i] = i2;
            }

            int mx = 0;
            for (int i = 1; i < N; i++)
            {
                mx = Math.Max(mx, V1[i] + V2[i]);
                Console.WriteLine(mx);
            }
        }
    }

    // libs ----------
    

    // common ----------

    internal static class Input
    {
        public static string ReadString()
        {
            string line = Console.ReadLine();
            return line;
        }

        public static int ReadInt()
        {
            string line = Console.ReadLine();
            return int.Parse(line);
        }

        public static int[] ReadIntArray()
        {
            string line = Console.ReadLine();
            return line.Split(' ').Select(int.Parse).ToArray();            
        }

        public static long ReadLong()
        {
            string line = Console.ReadLine();
            return long.Parse(line);
        }

        public static long[] ReadLongArray()
        {
            string line = Console.ReadLine();
            return line.Split(' ').Select(long.Parse).ToArray();
        }

        public static double[] ReadDoubleArray()
        {
            string line = Console.ReadLine();
            return line.Split(' ').Select(double.Parse).ToArray();
        }
    }
    
    internal class Program
    {
        public static void Main(string[] args)
        {
            var s = new Solution();
            s.Run();
        }
    }
}

Measured memory_bytes: 42216