#include <bits/stdc++.h>
using namespace std;
int n, m, x = 1, a[1000001], nxt[1000001], pre[1000001], lst[1000001],
          nxt_same[1000001];
int get() {
  while (x <= n && lst[x]) x++;
  if (x > n) return 0;
  lst[x] = 233;
  return x;
}
void del(int l, int r) {
  nxt[pre[l]] = nxt[r];
  pre[nxt[r]] = pre[l];
}
int rua(int l, int r) {
  if ((r - l) & 1) return 0;
  int len = 0, cnt = 0, rt = a[pre[l]];
  for (int i = l; i <= r; i = nxt[i])
    while (nxt_same[i]) {
      if (nxt_same[i] > r) return 0;
      if (!rua(nxt[i], pre[nxt_same[i]])) return 0;
      del(nxt[i], nxt_same[i]);
      nxt_same[i] = nxt_same[nxt_same[i]];
    }
  for (int i = l; i <= r; i = nxt[i]) len++, cnt += a[i] > 0;
  len = len / 2 + 1;
  if (len < cnt) return 0;
  for (int i = l; i <= r && cnt < len; i = nxt[i])
    if (!a[i]) {
      a[i] = get();
      if (!a[i]) return 0;
      cnt++;
    }
  for (int i = l; i <= r; i = nxt[i])
    while (i > l && nxt[i] <= r && a[i]) {
      if (a[pre[i]] && a[nxt[i]]) break;
      if (!a[pre[i]] && !a[nxt[i]]) break;
      a[pre[i]] = a[nxt[i]] = a[pre[i]] | a[nxt[i]];
      del(i, nxt[i]);
      i = pre[pre[i]];
    }
  for (int i = l; i <= r; i = nxt[i])
    if (!a[i]) a[i] = rt;
  return 1;
}
int main() {
  scanf("%d", &n);
  m = 2 * n - 1, nxt[0] = 1;
  for (int i = 1; i <= m; i++) {
    scanf("%d", &a[i]);
    nxt[i] = i + 1, pre[i] = i - 1;
  }
  if (a[1] && a[m] && a[1] != a[m]) return printf("no\n"), 0;
  a[1] = a[m] = a[1] | a[m];
  for (int i = m; i >= 1; i--)
    if (a[i]) nxt_same[i] = lst[a[i]], lst[a[i]] = i;
  if (!rua(1, m)) return printf("no\n"), 0;
  printf("yes\n");
  for (int i = 1; i <= m; i++) printf("%d%c", a[i], i < m ? ' ' : '\n');
}
