#include #include #include using namespace atcoder; using mint = modint998244353; using namespace std; #define rep(i,n) for(int i=0;i<(n);i++) #define Inf 1000000001 using P = pair; P op(P a,P b){ pair r; r.first = max({a.first,b.first}); r.second = r.first; if(a.first==r.second){ r.second = max(a.second,b.first); } else{ r.second = max(a.first,b.second); } return r; } P e(){ return make_pair(0,0); } int main(){ int n; cin>>n; vector> PP(n); vector pos(n+1,0); fenwick_tree F(n); rep(i,n){ cin>>PP[i].first; PP[i].second = 0; pos[PP[i].first] = i; F.add(i,1); } segtree seg(PP); vector a,b; rep(i,n){ auto ret= seg.all_prod(); int p0 = pos[ret.first]; int p1= pos[ret.second]; if(p0>p1){ swap(p0,p1); swap(ret.first,ret.second); } int v0 = F.sum(0,p0); int v1 = F.sum(0,p1); if(v1%2==0&&ret.second!=0){ F.add(p1,-1); a.push_back(ret.second); b.push_back(v1+1); seg.set(p1,make_pair(0,0)); } else if(v0%2==0){ F.add(p0,-1); a.push_back(ret.first); b.push_back(v0+1); seg.set(p0,make_pair(0,0)); } else{ cout<<"No"<