#include <bits/stdc++.h>
int N, a[1000001], first[500001], last[500001], pre[1000001], suc[1000001],
    q[1000001], D, sum[1000001], not_appeared[500001], Z;
void solve(int l, int r, bool meow) {
  if (l == r - 2) {
    if (!a[q[l + 1]]) a[q[l + 1]] = not_appeared[Z--];
    return;
  }
  if (a[q[l + 1]] && a[q[r - 1]]) {
    assert(!meow);
    for (int cutL = l + 2, cutR = r - 2; cutL <= cutR; cutL += 2, cutR -= 2) {
      if (!a[q[cutL]] && sum[cutL - 1] - sum[l] <= 1 &&
          sum[r - 1] - sum[cutL] <= 1) {
        a[q[cutL]] = a[q[l]];
        solve(l, cutL, false);
        solve(cutL, r, false);
        return;
      }
      if (!a[q[cutR]] && sum[cutR - 1] - sum[l] <= 1 &&
          sum[r - 1] - sum[cutR] <= 1) {
        a[q[cutR]] = a[q[l]];
        solve(l, cutR, false);
        solve(cutR, r, false);
        return;
      }
    }
    return;
  }
  if (sum[r - 2] - sum[l + 1] <= 1) {
    if (!a[q[l + 1]] && !a[q[r - 1]])
      a[q[l + 1]] = a[q[r - 1]] = not_appeared[Z--];
    else if (!a[q[r - 1]])
      a[q[r - 1]] = a[q[l + 1]];
    else
      a[q[l + 1]] = a[q[r - 1]];
    solve(l + 1, r - 1, false);
    return;
  }
  for (int cutL = l + 2, cutR = r - 2; cutL <= cutR; cutL++, cutR--) {
    if (!meow && !(cutL - l & 1) && !a[q[cutL]] &&
        sum[cutL - 1] - sum[l] <= 1 && sum[r - 1] - sum[cutL] <= 1) {
      a[q[cutL]] = a[q[l]];
      solve(l, cutL, false);
      solve(cutL, r, false);
      return;
    }
    if (!meow && !(r - cutR & 1) && !a[q[cutR]] &&
        sum[cutR - 1] - sum[l] <= 1 && sum[r - 1] - sum[cutR] <= 1) {
      a[q[cutR]] = a[q[l]];
      solve(l, cutR, false);
      solve(cutR, r, false);
      return;
    }
    if ((cutL - l & 1) && a[q[cutL]] && sum[cutL - 1] - sum[l + 1] <= 1 &&
        sum[r - 2] - sum[cutL] <= 1) {
      a[q[l + 1]] = a[q[r - 1]] = a[q[cutL]];
      solve(l + 1, cutL, false);
      solve(cutL, r - 1, false);
      return;
    }
    if ((r - cutR & 1) && a[q[cutR]] && sum[cutR - 1] - sum[l + 1] <= 1 &&
        sum[r - 1] - sum[cutR] <= 1) {
      a[q[l + 1]] = a[q[r - 1]] = a[q[cutR]];
      solve(l + 1, cutR, false);
      solve(cutR, r - 1, false);
      return;
    }
  }
}
bool Capella(int l, int r) {
  if (r - l & 1) return false;
  D = 0;
  for (int i = l + 1; i < r; i++) {
    q[++D] = i;
    if (a[i]) i = last[a[i]];
  }
  for (int i = 1; i <= D; i++) sum[i] = sum[i - 1] + (a[q[i]] ? 1 : -1);
  if (sum[D] > 1) return false;
  if (l == 0 && D > 1 && a[q[1]] && a[q[D]]) return false;
  q[0] = l;
  solve(0, D + 1, l == 0);
  return true;
}
int main() {
  scanf("%d", &N);
  for (int i = 1; i <= N + N - 1; i++) scanf("%d", a + i);
  for (int i = 1; i <= N; i++) {
    first[i] = N + N;
    last[i] = 0;
  }
  for (int i = 1; i <= N + N - 1; i++)
    if (a[i]) {
      pre[i] = last[a[i]];
      last[a[i]] = i;
    }
  for (int i = N + N - 1; i; i--)
    if (a[i]) {
      suc[i] = first[a[i]];
      first[a[i]] = i;
    }
  for (int i = 1; i <= N + N - 1; i++)
    if (a[i]) {
      if (i != first[a[i]]) {
        if (q[D] != a[i]) {
          puts("no");
          return 0;
        }
        D--;
      }
      if (i != last[a[i]]) q[++D] = a[i];
    }
  for (int i = 1; i <= N; i++)
    if (first[i] > last[i]) not_appeared[++Z] = i;
  for (int i = 1; i <= N; i++)
    if (last[i])
      for (int j = first[i]; j != last[i]; j = suc[j])
        if (!Capella(j, suc[j])) {
          puts("no");
          return 0;
        }
  if (!Capella(0, N + N)) {
    puts("no");
    return 0;
  }
  puts("yes");
  for (int i = 1; i <= N + N - 1; i++) printf("%d ", a[i]);
  return 0;
}
