#include <bits/stdc++.h>
using std::deque;
const int N = 1000100;
int suf[N], pre[N], Next[N], last[N], c[N], a[N], n, m, now;
struct note {
  int x, p;
};
deque<note> q;
void endd() {
  puts("no");
  exit(0);
}
void del(int x, int y) {
  suf[x] = suf[y];
  pre[suf[y]] = x;
}
int get() {
  while (c[now]) now++;
  if (now > n) endd();
  c[now] = 1;
  return now;
}
void solve(int l, int r) {
  if (r < l) return;
  if ((r - l) & 1) endd();
  for (int i = l; i <= r; i = suf[i]) {
    if (!a[i]) continue;
    while (Next[i]) {
      int to = Next[i];
      if (to > r) endd();
      solve(suf[i], pre[to]);
      del(i, to);
      Next[i] = Next[to];
    }
  }
  int sum = 0, sum0 = 0;
  for (int i = l; i <= r; i = suf[i]) {
    sum += (a[i] > 0);
    sum0 += (!a[i]);
  }
  if (sum0 < sum - 1) endd();
  for (int i = l; i <= r && sum0 > sum; i = suf[i])
    if (!a[i]) a[i] = get(), sum0--, sum++;
  int rt = a[pre[l]];
  for (int i = l; suf[i] <= r; i = suf[i]) {
    while (i > l && suf[i] <= r && a[i] && a[suf[i]] && (!a[pre[i]])) {
      a[pre[i]] = a[suf[i]];
      del(pre[i], suf[i]);
      i = pre[pre[i]];
    }
    while (i >= l && suf[suf[i]] <= r && a[i] && a[suf[i]] &&
           (!a[suf[suf[i]]])) {
      a[suf[suf[i]]] = a[i];
      del(i, suf[suf[i]]);
      i = pre[i];
    }
  }
  for (int i = l; i <= r; i = suf[i])
    if (!a[i]) a[i] = rt;
}
int main() {
  scanf("%d", &n);
  m = 2 * n - 1;
  for (int i = 1; i <= m; i++) scanf("%d", &a[i]), c[a[i]]++;
  if (a[1] != a[2 * n - 1] && a[1] && a[2 * n - 1]) endd();
  a[1] = a[m] = (a[1] | a[m]);
  for (int i = m; i >= 1; i--) Next[i] = last[a[i]], last[a[i]] = i;
  now = 1;
  suf[0] = 1;
  for (int i = 1; i <= m; i++) pre[i] = i - 1, suf[i] = i + 1;
  solve(1, m);
  puts("yes");
  for (int i = 1; i <= m; i++) printf("%d ", a[i]);
}
