#include <iostream>
#include <string>
#include <algorithm>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include<unordered_map>
#include <queue>
#include <iomanip>
#include <fstream>
#include <stack>

#define int long long
#define endl '\n'
#define fi first
#define se second
#define p_b push_back

using namespace std;

const int inf = 1e9 + 7,ma=21e5;
int ans[ma],t[4*ma+5];
unordered_map<int,int>mp;

void b(int v,int vl,int vr)
{
    if(vl==vr)
    {
        t[v]=ans[vl];
        return;
    }
    int vm=(vl+vr)/2;
    b(2*v+1,vl,vm);
    b(2*v+2,vm+1,vr);
    if(t[2*v+1]<t[2*v+2])
    {
        if(mp[t[2*v+1]]<=mp[t[2*v+2]])
        {
            cout<<-1;
            exit(0);
        }
    }
    else
    {
        if(mp[t[2*v+2]]<=mp[t[2*v+1]])
        {
            cout<<-1;
            exit(0);
        }
    }
    t[v]=min(t[2*v+1],t[2*v+2]);
}

main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n;
    cin>>n;
    int st=0,dv=1;
    unordered_map<int,int>st_dv;
    st_dv[1]=1;
    vector<int>lay;
    lay.p_b(1);
    while(dv!=n+1)
    {
        lay.p_b(dv);
        st++;
        dv*=2;
        st_dv[dv]=1;
    }
    lay.p_b(dv);
    int a[n];
    unordered_map<int,vector<int>>cnt;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
        mp[a[i]]++;
    }
    if(n==1)
    {
        cout<<a[0];
        return 0;
    }
    for(auto u:mp)
    {
        //cout<<u.fi<<" "<<u.se<<endl;
        cnt[u.se].p_b(u.fi);
    }
    for(auto u:cnt)
        sort(cnt[u.fi].begin(),cnt[u.fi].end());
    int sz=lay[st];
    for(int i=0;i<sz;i++)
        ans[i]=inf;
    int c,sch=0;
    while(sch<st)
    {
        c=lay[sch];
        /*cout<<c<<" "<<cnt[st-sch].size()<<endl;
        for(auto u:cnt[st-sch])
            cout<<u<<" ";
        cout<<endl;*/
        if(cnt[st-sch].size()!=c)
        {
            cout<<-1;
            return 0;
        }
        int in=0;
        for(int i=0;i<sz;i+=lay[st-sch])
        {
            if(ans[i]==inf)
            {
                ans[i]=cnt[st-sch][in];
                in++;
            }
            if(in==cnt[st-sch].size())
                break;
        }
        sch++;
    }
    b(0,0,sz-1);
    for(int i=0;i<sz;i++)
        cout<<ans[i]<<" ";
    return 0;
}
