func_code_string: #include <bits/stdc++.h>   template <typename T>   inline void read(T &x) {     x = 0;     char c = getchar();     bool flag = false;     while (!isdigit(c)) {       if (c ==  - ) flag = true;       c = getchar();     }     while (isdigit(c)) x = x * 10 + (c ^ 48), c = getchar();     if (flag) x = -x;   }   using namespace std;   int n, q, nn;   bitset<2011> bt[1011][2], h[2011];   int htot;   int ans[2011], pos[2011];   inline void Gauss() {     int nw = 1;     for (int i = 1; i < nn; ++i) {       int id = -1;       for (int hang = nw; hang <= htot; ++hang)         if (h[hang][i]) {           id = hang;           break;         }       if (id == -1) continue;       swap(h[id], h[nw]);       pos[i] = nw;       for (int hang = 1; hang <= htot; ++hang)         if (hang != nw && h[hang][i]) {           h[hang] = h[hang] ^ h[nw];         }       ++nw;       if (nw > htot) break;     }     for (int i = 1; i <= htot; ++i)       if (h[i][nn]) {         bool flag = false;         for (int j = 1; j < nn; ++j)           if (h[i][j]) {             flag = true;             break;           }         if (!flag) {           puts( NO );           exit(0);         }       }     for (int i = 1; i < nn; ++i) {       ans[i] = h[pos[i]][nn];     }     puts( YES );     for (int i = 1; i <= n; ++i) {       if (ans[i] == 0 && ans[i + n] == 0)         putchar( . );       else if (ans[i] == 1 && ans[i + n] == 0)         putchar( R );       else if (ans[i] == 0 && ans[i + n] == 1)         putchar( B );       else         putchar( Y );     }     putchar(  n );   }   int main() {     read(n), read(q);     nn = n + n + 1;     for (int i = 1; i <= n; ++i) bt[i][0][i] = bt[i][1][i + n] = 1;     for (int i = 1; i <= q; ++i) {       char opt[6];       scanf( %s , opt);       if (opt[0] ==  m ) {         int k;         read(k);         htot += 2;         for (int j = 1; j <= k; ++j) {           int p;           read(p);           h[htot - 1] ^= bt[p][0];           h[htot] ^= bt[p][1];         }         char res[3];         scanf( %s , res);         if (res[0] ==  W )           h[htot - 1][nn] = 0, h[htot][nn] = 0;         else if (res[0] ==  R )           h[htot - 1][nn] = 1, h[htot][nn] = 0;         else if (res[0] ==  B )           h[htot - 1][nn] = 0, h[htot][nn] = 1;         else           h[htot - 1][nn] = 1, h[htot][nn] = 1;       } else if (opt[0] ==  R  && opt[1] ==  Y ) {         int k;         read(k);         for (int j = 1; j <= k; ++j) {           int p;           read(p);           bt[p][1] = bt[p][1] ^ bt[p][0];         }       } else if (opt[0] ==  R  && opt[1] ==  B ) {         int k;         read(k);         for (int j = 1; j <= k; ++j) {           int p;           read(p);           swap(bt[p][0], bt[p][1]);         }       } else if (opt[0] ==  Y  && opt[1] ==  B ) {         int k;         read(k);         for (int j = 1; j <= k; ++j) {           int p;           read(p);           bt[p][0] = bt[p][0] ^ bt[p][1];         }       }     }     Gauss();     return 0;   }   