#include<cstdio>
#include<iostream>
#include<vector>
using namespace std;
int N;
vector<int> pre,post;
bool isMirror=false;
void getpost(int root,int tail) {
if(root>tail) return;
int i=root+1,j=tail;
if(!isMirror) {
while(i<=tail&&pre[root]>pre[i]) i++;
while(j>root&&pre[root]<=pre[j]) j--;
} else {
while(i<=tail&&pre[root]<=pre[i]) i++;
while(j>root&&pre[root]>pre[j]) j--;
}
if(i-j!=1) return;
getpost(root+1,j);
getpost(i,tail);
post.push_back(pre[root]);
}
int main() {
cin>>N;
pre.resize(N);
for(int i=0; i<N; i++) {
cin>>pre[i];
}
getpost(0,N-1);
if(post.size()!=N) {
isMirror=true;
post.clear();
getpost(0,N-1);
}
if(post.size()==N) {
printf("YES\n%d",post[0]);
for(int i=1; i<N; i++)
printf(" %d",post[i]);
} else
printf("NO");
}
网友评论