func_code_string: #include <bits/stdc++.h>   int i, j, n, m;   bool killed[200100], visited[200100];   int vlist[200100][3];   int ans[200100];   inline int myabs(int a) { return a < 0 ? -a : a; }   inline int sign(int a) { return a / myabs(a); }   struct G {     int ind[200100];     int last[200100 * 2], e[200100 * 2], e_num[200100 * 2];     int t;     void addE(int a, int b, int ee) {       t++;       last[t] = ind[a];       ind[a] = t;       e[t] = b;       e_num[t] = ee;     }   } g;   inline void gen_ans_for_i(int i, int j) {     if (vlist[i][0] == 1) {       ans[i] = vlist[i][1] > 0 ? 1 : 0;     } else {       if (myabs(vlist[i][1]) == j) {         ans[i] = vlist[i][1] > 0 ? 1 : 0;       } else {         ans[i] = vlist[i][2] > 0 ? 1 : 0;       }     }   }   bool dfs(int a, int fae) {     if (visited[a] || killed[a]) {       return true;     }     visited[a] = 1;     int i;     for (i = g.ind[a]; i; i = g.last[i]) {       if (g.e_num[i] != fae)         if (dfs(g.e[i], g.e_num[i])) {           if (!killed[a]) {             gen_ans_for_i(g.e_num[i], a);             killed[a] = true;           }         }     }     return killed[a];   }   void dfs2(int a, int fae) {     if (visited[a]) {       return;     }     visited[a] = 1;     int i;     for (i = g.ind[a]; i; i = g.last[i]) {       if (g.e_num[i] != fae)         if (!killed[g.e[i]]) {           killed[g.e[i]] = true;           gen_ans_for_i(g.e_num[i], g.e[i]);           dfs2(g.e[i], g.e_num[i]);         }     }     return;   }   int main() {     scanf( %d %d , &n, &m);     int a, b;     for (i = 1; i <= n; i++) {       scanf( %d , &j);       while (j--) {         scanf( %d , &a);         b = myabs(a);         vlist[b][0]++;         if (a < 0) {           vlist[b][vlist[b][0]] = -i;         } else {           vlist[b][vlist[b][0]] = i;         }       }     }     for (i = 1; i <= m; i++) {       if (vlist[i][0] == 1) {         killed[myabs(vlist[i][1])] = true;         if (vlist[i][1] < 0) {           ans[i] = 0;         } else {           ans[i] = 1;         }       } else if (vlist[i][0] == 2) {         a = myabs(vlist[i][1]);         b = myabs(vlist[i][2]);         if (sign(vlist[i][1]) * sign(vlist[i][2]) > 0) {           killed[a] = true;           killed[b] = true;           ans[i] = vlist[i][1] > 0 ? 1 : 0;         } else {           g.addE(a, b, i);           g.addE(b, a, i);         }       }     }     for (i = 1; i <= n; i++) {       if (!visited[i] && !killed[i]) {         dfs(i, 0);       }     }     memset(visited, 0, sizeof(visited));     for (i = 1; i <= n; i++) {       if (killed[i]) {         dfs2(i, 0);       }     }     for (i = 1; i <= n; i++) {       if (!killed[i]) {         printf( NO n );         return 0;       }     }     printf( YES n );     for (i = 1; i <= m; i++) {       printf( %d , ans[i]);     }     printf(  n );     return 0;   }   