#include<bits/stdc++.h>
using namespace std;

//n=1e6->~0.9->1.5s (affected by I/O)

//1-indexed
struct ITsort{
  typedef int T;
  typedef pair<T,int> Node;
  const Node INF={1e9,0};//be careful with T!
  //{val,idx}
  //edit this function for sort descending/ascending
  Node Merge(const Node& a, const Node& b){
    Node ans=a;
    if(b.first<a.first)
      ans=b; 
    else if(b.first==a.first)
      ans.second=min(ans.second,b.second);
    return ans;
  }
  vector<T> a;
  vector<Node> st;
  int n;

  Node get(int u, int v){//[u, v)
    Node ra=INF,rb=INF;
    for(u+=n,v+=n;u<v;u>>=1,v>>=1){
      if(u&1) ra=Merge(ra,st[u++]);
      if(v&1) rb=Merge(rb,st[--v]);
    }
    return Merge(ra,rb);
  }

  void upd(int i,T v){
    for(st[i+=n]=Node(v,i);i>>=1;){
      st[i]=Merge(st[i<<1],st[i<<1|1]);
    }
  }

  ITsort(int _n,const vector<T> &x){
    n=_n;
    a=x;
    st.assign(2*n+5,INF);
    // cout<<st[0].first<<" "<<st[0].second<<endl;
    // cout<<n<<endl;
    // for(int i:x)cout<<i<<",";
    for(int i=1;i<=n;i++){
      // cout<<i<<" ";
      upd(i,a[i]);
    }
  }

  void Sort(int l,int r){
    for(int i=l;i<=r;i++){
      Node cur=get(i,r+1);
      // cout<<cur.first<<" "<<cur.second<<endl;
      swap(a[i],a[cur.second]);
      upd(i,a[i]);
      upd(cur.second,a[cur.second]);
    }
  }

  void Sort(){
    Sort(1,n);
  }
};

int main(){
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);cout.tie(NULL);
  // cout<<INF.first<<" "<<INF.second<<endl;
  vector<int>a;
  int n;
  cin>>n;n<<=1;a.resize(n+1);
  for(int i=1;i<=n;i++)cin>>a[i];
  // for(int i=1;i<=n;i++)cout<<a[i]<<" ";
  ITsort it(n,a);
  it.Sort(1,n/2);
  for(int i=1;i<=n/2;i++)cout<<it.a[i]<<" ";
  it.Sort(n/2+1,n);
  for(int i=n;i>=n/2+1;i--)cout<<it.a[i]<<" ";
}