#include <bits/stdc++.h>
#define int long long
using namespace std;
#define inf 1e18
typedef pair<int,int> pii;
vector<int> t;
vector<int> mas;
void build(int v,int l,int r){
    if(l+1==r){
        t[v]=mas[l];
    }
    else{
        int m=(l+r)/2;
        build(2*v,l,m);
        build(2*v+1,m,r);
        t[v]=min(t[v*2],t[v*2+1]);
    }
}

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int n;
    cin>>n;
    vector<int> a(n);
    map<int,int> mp;
    multiset<pair<int,int>> st;
    for(int i=0;i<n;i++){
        cin>>a[i];
        mp[a[i]]++;
    }
    while(!mp.empty()){
        pii p={mp.begin()->first,mp.begin()->second};
        mp.erase(mp.begin());
        st.insert({-p.second,p.first});
    }
    mas.resize((n+1)/2,-1);
    for(int i=(n+1)/2;i>=0;i/=2){
        //i=max((int)1,i);

        for(int j=0;j<(n+1)/2;j+=max(i,(int)1)){
            if(mas[j]==-1) {
                mas[j] = (*st.begin()).second;
                //break;
                if(st.empty() && i!=0){
                    cout<<-1;
                    return 0;
                }
                st.erase(st.begin());
            }
        }

    
        if(i==0){
            break;
        }
    }
    t.resize(4*mas.size(),inf);
    build(1,0,mas.size());

    map<int,int> st1;
    for(int i=0;i<t.size();i++){
        if(t[i]!=inf){
            st1[t[i]]++;
        }
    }
    for(auto i:a){
        st1[i]--;
    }
    while(!st1.empty()){
        if(st1.begin()->second!=0){
            cout<<-1;
            return 0;
        }
        st1.erase(st1.begin());
    }
    for(auto i:mas){
        cout<<i<<' ';
    }
    cout<<endl;
}

/*
 3 0 3
 1 2
 2 3
 3 1

 4 3 3
 1 2
 2 3
 3 4
 1 3
 4 2
 2 3

 3 1 1
 1 2
 2 3
 */