#include using namespace std; typedef long long ll; typedef long double ld; typedef pair PP; // #define MOD 1000000007 #define MOD 998244353 #define INF 2305843009213693951 //#define INF 810114514 #define PI 3.141592653589 #define setdouble setprecision #define REP(i,n) for(ll i=0;i<(n);++i) #define OREP(i,n) for(ll i=1;i<=(n);++i) #define RREP(i,n) for(ll i=(n)-1;i>=0;--i) #define ORREP(i,n) for(ll i=(n);i>=1;--i) #define rep(i,a,b) for(ll i=(a);i<=(b);++i) #define ALL(v) (v).begin(), (v).end() #define GOODBYE do { cout << "-1" << endl; return 0; } while (false) #define MM <<" "<< #define Endl endl #define debug true #define debug2 false int main(void){ //cin.tie(nullptr); //ios::sync_with_stdio(false); ll N; cin >> N; vector P(N); REP(i,N){cin >> P[i];P[i]--;} list L;REP(i,N){L.push_back(P[i]);} vector<_List_iterator> IT(N); int now = 0; for(auto it=L.begin();it!=L.end();it++){ IT[P[now]] = it; now++; } set R; REP(i,N){R.insert(i);} vector Ans; REP(i,N/2){ ll z = *R.begin(); auto it = L.end();it--; if(z==(*it)){ auto it2 = R.begin();it2++; z = *it2; } Ans.push_back(*IT[z]); R.erase(R.find(*IT[z])); auto it3 = L.erase(IT[z]); Ans.push_back(*it3); R.erase(R.find(*it3)); L.erase(it3); } REP(i,N){ cout << Ans[i]+1 << " "; } cout << endl; return 0; }