func_code_string: #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;   }   