#include <bits/stdc++.h>
using namespace std;
const int RLEN = 1 << 18 | 1;
inline char nc() {
  static char ibuf[RLEN], *ib, *ob;
  (ib == ob) && (ob = (ib = ibuf) + fread(ibuf, 1, RLEN, stdin));
  return (ib == ob) ? -1 : *ib++;
}
inline int rd() {
  char ch = nc();
  int i = 0, f = 1;
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = nc();
  }
  while (isdigit(ch)) {
    i = (i << 1) + (i << 3) + ch - '0';
    ch = nc();
  }
  return i * f;
}
const int N = 1e6 + 50, L = 21;
int n, a[N], c[N], li[N], ri[N], pre[N], lst[N], mn[N][21];
vector<int> unvis;
inline int ga(int *anc, int x) {
  return (anc[x] == x) ? x : (anc[x] = ga(anc, anc[x]));
}
inline void solve(int l, int r) {
  vector<int> vec;
  int p = -1;
  for (int i = ga(ri, l); i <= r; i = ga(ri, i + 1)) {
    vec.push_back(i);
    ++p;
    while (vec.size() >= 3) {
      if (((!a[vec[p - 2]] && a[i]) || (a[vec[p - 2]] && !a[i]) ||
           (a[vec[p - 2]] && (a[vec[p - 2]] == a[i]))) &&
          a[vec[p - 1]]) {
        if (a[vec[p - 2]] != a[vec[p]])
          a[vec[p - 2]] = a[i] = a[vec[p - 2]] + a[i];
        vec.pop_back();
        vec.pop_back();
        p -= 2;
      } else
        break;
    }
  }
  for (int j = 1; j < vec.size(); ++j)
    if (a[vec[j]] && a[vec[j - 1]]) {
      puts("no");
      exit(0);
    }
  deque<int> q;
  int nowl = vec[0];
  for (int j = 1; j < vec.size() - 1; ++j) q.push_back(vec[j]);
  while (!q.empty()) {
    int u = q.front(), v = q.back();
    if (q.size() == 1) {
      if (!a[u]) {
        if (unvis.empty()) {
          puts("no");
          exit(0);
        }
        a[u] = unvis.back();
        unvis.pop_back();
      }
      break;
    } else {
      if (!a[u] && !a[v]) {
        if (unvis.empty()) {
          puts("no");
          exit(0);
        }
        a[u] = a[v] = unvis.back();
        unvis.pop_back();
        nowl = a[u];
        q.pop_front();
        q.pop_back();
      } else if (a[u]) {
        a[q[1]] = nowl;
        q.pop_front();
        q.pop_front();
      } else {
        a[q[q.size() - 2]] = nowl;
        q.pop_back();
        q.pop_back();
      }
    }
  }
  for (int i = ga(ri, l); i <= r; i = ga(ri, i + 1))
    if (i != l) ri[i] = r + 1;
  li[r] = l;
}
inline void solve2() {
  if (unvis.size()) {
    a[1] = a[2 * n - 1] = unvis.back();
    unvis.pop_back();
    solve(1, 2 * n - 1);
    return;
  }
  vector<int> vec;
  int p = -1;
  for (int i = 1; i < 2 * n; i = ga(ri, i + 1)) {
    vec.push_back(i);
    ++p;
  }
  int c0 = 0, c1 = 0;
  for (int j = 0; j < vec.size(); ++j)
    if (a[vec[j]]) ++c1;
  for (int j = 1; j < p; j++) {
    if (!a[vec[j]]) continue;
    --c1;
    if (vec[j] & 1) {
      if (j >= 2 * c0 && p - j >= 2 * c1) {
        a[1] = a[2 * n - 1] = a[vec[j]];
        solve(1, 2 * n - 1);
        return;
      }
    }
    ++c0;
  }
  puts("no");
  exit(0);
}
int main() {
  n = rd();
  for (int i = 1; i < 2 * n; i++) {
    a[i] = rd();
    ++c[a[i]];
  }
  for (int i = 1; i <= n; i++)
    if (!c[i]) unvis.push_back(i);
  if (a[1] && a[2 * n - 1] && a[1] != a[2 * n - 1]) {
    puts("no");
    return 0;
  } else if ((a[1] || a[2 * n - 1]) && (a[1] != a[2 * n - 1])) {
    a[1] = a[2 * n - 1] = a[1] + a[2 * n - 1];
  }
  for (int i = 1; i < 2 * n; i++) {
    if (!a[i]) continue;
    pre[i] = (lst[a[i]] ? lst[a[i]] : i);
    lst[a[i]] = i;
  }
  for (int i = 1; i < 2 * n; i++) {
    mn[i][0] = (pre[i] ? pre[i] : i);
    if (a[i] && ((i - pre[i]) % 2)) {
      puts("no");
      return 0;
    }
    for (int j = 1; j < L && (i >= (1 << j)); j++)
      mn[i][j] = min(mn[i][j - 1], mn[i - (1 << (j - 1))][j - 1]);
    if (a[i] && pre[i] < i) {
      int mx = i, pos = i - 1;
      for (int j = L - 1; ~j; j--)
        if (pos - (1 << j) + 1 > pre[i])
          mx = min(mx, mn[pos][j]), pos -= (1 << j);
      if (mx <= pre[i]) {
        puts("no");
        return 0;
      }
    }
  }
  for (int i = 1; i <= 2 * n; i++) ri[i] = i, li[i] = i;
  for (int i = 2; i < 2 * n; i++)
    if (a[i] && ga(li, pre[i]) < i) solve(ga(li, pre[i]), i);
  if (!a[1] && !a[2 * n - 1]) solve2();
  puts("yes");
  for (int i = 1; i < 2 * n; i++) printf("%d ", a[i]);
}
