#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0, fu = 0;
  char ch = getchar();
  for (; ch < 48 || ch > 57; ch = getchar()) fu |= (ch == '-');
  for (; ch > 47 && ch < 58; ch = getchar()) x = x * 10 + ch - '0';
  return fu ? -x : x;
}
int n, N, a[1000005];
bool vis[1000005];
int novis[500005], top;
int tmp[1000005], tmptop;
int pre[1000005], nxt[1000005];
void del(int x) {
  vis[x] = 1;
  nxt[pre[x]] = nxt[x];
  pre[nxt[x]] = pre[x];
}
bool no;
void solve(int l, int r) {
  if (l == r) return;
  map<int, int> mp;
  for (int i = l; i < r; i = nxt[i]) mp[a[i]] = -1;
  for (int i = l; i < r; i = nxt[i]) {
    if (a[i] && mp[a[i]] != -1 && !vis[i]) {
      if (vis[mp[a[i]]]) {
        no = 1;
        puts("no");
        return;
      }
      solve(mp[a[i]], i);
      if (no) return;
    }
    if (mp[a[i]] == -1 && a[i]) mp[a[i]] = i;
  }
  for (int cas = 10; cas--;)
    for (int i = l; i < r; i = nxt[i])
      if (a[i]) {
        for (int tmp, t1, t2, tag = 0;;) {
          tmp = nxt[nxt[i]], t1 = pre[i], t2 = nxt[i];
          if (t1 > l && t2 < r && ((!a[t1] && a[t2]) || (a[t1] && !a[t2]))) {
            a[t1] = a[t2] = a[t1] | a[t2];
            del(i), del(t2), i = t1;
            goto con;
          }
          break;
        con:;
        }
      }
  for (int i = nxt[l]; i < r; i = nxt[i])
    if (pre[i] > l && a[pre[i]] && a[i]) {
      no = 1;
      puts("no");
      return;
    }
  int check = 0;
  for (int i = nxt[l]; i <= r; i = nxt[i], check ^= 1)
    if (!a[i]) {
      if (check)
        a[i] = a[l];
      else if (a[pre[i]] != a[l] && pre[pre[i]] >= l)
        a[i] = a[pre[pre[i]]];
      else
        a[i] = novis[top--];
    }
  if (check) {
    no = 1;
    puts("no");
    return;
  }
  for (int i = nxt[l]; i <= r; i = nxt[i]) del(i);
}
int main() {
  n = read(), N = (n << 1) - 1;
  int st = 0;
  for (int i = 1; i <= N; i++) a[i] = read();
  if (a[1] && a[N] && a[1] != a[N]) return puts("no"), 0;
  a[1] ? a[N] = a[1] : a[N] ? a[1] = a[N] : 0;
  for (int i = 1; i <= N; i++) vis[a[i]] = 1;
  for (int i = 1; i <= n; i++)
    if (!vis[i]) novis[++top] = i;
  for (int i = 1; i <= N; i++)
    if (a[i]) {
      st = i;
      break;
    }
  if (!st) {
    printf("yes\n1 ");
    for (int i = 2; i <= n; i++) printf("%d 1 ", i);
    return 0;
  }
  for (int i = st; i <= N; i++) tmp[++tmptop] = a[i];
  for (int i = 2; i <= st; i++) tmp[++tmptop] = a[i];
  for (int i = 1; i <= N; i++) a[i] = tmp[i], vis[i] = 0;
  for (int i = 0; i <= N; i++) nxt[i] = i + 1, pre[i + 1] = i;
  solve(1, N);
  if (no) return 0;
  puts("yes");
  for (int i = 1; i <= N; i++)
    if (!a[i]) a[i] = novis[top--];
  for (int i = N - st + 1; i <= N; i++) printf("%d ", a[i]);
  for (int i = 2; i <= N - st + 1; i++) printf("%d ", a[i]);
  return 0;
}
