#include <bits/stdc++.h>
int MakeTB(unsigned int *A, unsigned int *B, unsigned int *T, unsigned int N,
           unsigned int StartBit) {
  for (unsigned int i = 0; i < N - 1; i++)
    if (A[i] == 0)
      if (B[i] == 0) {
        if (i > 0 && T[i] != 0) return 0;
        T[i] = 0;
        T[i + 1] = 0;
      } else
        return 0;
    else if (B[i] == 0) {
      if (i == 0) T[i] = StartBit;
      T[i + 1] = !T[i];
    } else {
      if (i > 0 && T[i] != 1) return 0;
      T[i] = 1;
      T[i + 1] = 1;
    }
  return 1;
}
int MakeTWB(unsigned int *A, unsigned int *B, unsigned int *T, unsigned int N) {
  unsigned int *a, *b, *t1, *t2;
  a = new unsigned int[N - 1];
  b = new unsigned int[N - 1];
  t1 = new unsigned int[N];
  t2 = new unsigned int[N];
  for (unsigned int i = 0; i < N - 1; i++) {
    a[i] = A[i] & 1;
    b[i] = B[i] & 1;
  }
  if (!(MakeTB(a, b, t1, N, 0) || MakeTB(a, b, t1, N, 1))) return 0;
  for (unsigned int i = 0; i < N - 1; i++) {
    a[i] = A[i] >> 1;
    b[i] = B[i] >> 1;
  }
  if (!(MakeTB(a, b, t2, N, 0) || MakeTB(a, b, t2, N, 1))) return 0;
  for (unsigned int i = 0; i < N; i++) T[i] = t1[i] | (t2[i] << 1);
  return 1;
}
int main(void) {
  unsigned int N;
  unsigned int *a, *b, *t;
  scanf("%d", &N);
  a = new unsigned int[N - 1];
  b = new unsigned int[N - 1];
  t = new unsigned int[N];
  for (unsigned int i = 0; i < N - 1; i++) scanf("%d", &a[i]);
  for (unsigned int i = 0; i < N - 1; i++) scanf("%d", &b[i]);
  if (MakeTWB(a, b, t, N)) {
    printf("YES\n");
    for (unsigned int i = 0; i < N; i++) printf("%i ", t[i]);
  } else
    printf("NO");
  return 0;
}
