#include using namespace std; using ll = long long; constexpr ll mod = 998244353; template struct Mint { using M=Mint; ll v; M& put(ll x) { v=(x>=1; } return res; } M inv() { return pow(mod-2); } }; using mint = Mint; #include #include // for tree #include // for tree using namespace __gnu_pbds; template using gtree = tree, rb_tree_tag, tree_order_statistics_node_update>; int main(){ cin.tie(0); cin.sync_with_stdio(0); int n; cin >> n; vector p(n); for(int i = 0; i < n; ++i){ cin >> p[i]; --p[i]; } vector inv(n); for(int i = 0; i < n; ++i){ inv[p[i]] = i; } gtree gt; for(int i = 0; i < n; ++i){ gt.insert(i); } int k = 0; vector q; for(int iter = 0; iter < n / 2; ++iter){ while(true){ int key = inv[k]; if(gt.find(key) != gt.end() && gt.order_of_key(key) != gt.size() - 1){ int idx1 = key; int idx2 = *gt.find_by_order(gt.order_of_key(key) + 1); gt.erase(idx1); gt.erase(idx2); q.emplace_back(p[idx1]); q.emplace_back(p[idx2]); break; } ++k; } } for(int i = 0; i < q.size(); ++i){ cout << q[i] + 1 << " \n"[i + 1 == q.size()]; } }