B - Curiosity Has No Limits

int main(){
    cin.tie(0);
    ios::sync_with_stdio(false);

    // input
    ll N; 
    cin>>N;

    VI A(N-1);
    rep(i, N-1) cin >> A[i];

    VI B(N-1);
    rep(i, N-1) cin >> B[i];

    // N==2は全探索
    if(N==2){
      rep(a,4){
        rep(b,4){
          bool f = (a|b)==A[0]; // ビット演算の優先度は低いので括弧を使うこと
          bool g = (a&b)==B[0];
          if(f&&g){
            // found
            p("YES");
            p2(a,b);return 0;
          }
        }
      }
    }

    // N>2とする
    VI C(N);
    rep(a,4){
      rep(b,4){
        C[0]=a;
        C[1]=b;
        if(((C[0]|C[1])==A[0]) && ((C[0]&C[1])==B[0])){
          // ok
        }else{
          continue;
        }
        FOR(i,2,N){
          // iについて決めよう
          bool found=false;
          rep(c,4){
            // cならどうか
            if(((C[i-1]|c)==A[i-1]) && ((C[i-1]&c)==B[i-1])){
              found=true;
              C[i]=c;
            }
          }
          if(!found)break;
          if(i==N-1){
            // 決まった
            p("YES");
            print_vector(C); return 0;
          }
        }
      }
    }
    p("NO");
    
    return 0;
}