#include <bits/stdc++.h>
using namespace std;
#define int long long
constexpr int N = 1e3 + 10;
constexpr int inf = 1E18, mod = 1e9 + 7;
int pre[N], ino[N], pos[N], n, cnt;
inline bool build(int il, int ir, int pl, int pr, int ty) {
if(il > ir) return true;
int root = pre[pl];
int k;
if(ty == 0) {
for (k = il; k <= ir; k ++) {
if(ino[k] == root) {
break;
}
}
if(k > ir) return false;
}else {
for (k = ir; k >= il; k --) {
if(ino[k] == root) {
break;
}
}
if(k < il) return false;
}
bool res = true;
if(!build(il, k - 1, pl + 1, pl + 1 + (k - 1 - il), ty)) res = false;
if(!build(k + 1, ir, pl + 1 + (k - 1 - il) + 1, pr, ty)) res = false;
pos[++ cnt] = root;
return res;
}
inline void Solve() {
cin >> n;
for (int i = 1; i <= n; i ++) {
cin >> pre[i];
ino[i] = pre[i];
}
sort(ino + 1, ino + 1 + n);
if(build(1, n, 1, n, 0)) {
cout << "YES" << '\n';
cout << pos[1];
for (int i = 2; i <= n; i ++) {
cout << " " << pos[i];
}
}else {
reverse(ino + 1, ino + 1 + n);
cnt = 0;
if(build(1, n, 1, n, 1)) {
cout << "YES" << '\n';
cout << pos[1];
for (int i = 2; i <= n; i ++) {
cout << " " << pos[i];
}
}else {
cout << "NO";
}
}
}
signed main() {
cin.tie(nullptr) -> sync_with_stdio(false);
int T = 1;
for (; T; T --) Solve();
return 0;
}