func_code_string: #include <bits/stdc++.h>   using namespace std;   struct SNM {     vector<SNM*> trgs;     vector<SNM*> rv_trgs;     int stype;     bool asgn;     bool used;     void asgnN() {       if (asgn) return;       asgn = true;       for (vector<SNM*>::iterator i = trgs.begin(); i != trgs.end(); i++) {         (*i)->asgnN();       }     }     void usedN() {       if (used) return;       used = true;       if (stype == 1) return;       for (vector<SNM*>::iterator i = rv_trgs.begin(); i != rv_trgs.end(); i++) {         (*i)->usedN();       }     }     SNM() {       used = false;       asgn = false;     }   };   SNM nodes[100000];   int main() {     int n, m;     scanf( %d%d , &n, &m);     for (int i = 0; i < n; i++) {       scanf( %d , &nodes[i].stype);     }     for (int i = 0; i < m; i++) {       int a, b;       scanf( %d%d , &a, &b);       a--;       b--;       nodes[a].trgs.push_back(&nodes[b]);       nodes[b].rv_trgs.push_back(&nodes[a]);     }     for (int i = 0; i < n; i++) {       if (nodes[i].stype == 1) {         nodes[i].asgnN();       }     }     for (int i = 0; i < n; i++) {       if (nodes[i].stype == 2) {         nodes[i].usedN();       }     }     for (int i = 0; i < n; i++) {       if (nodes[i].asgn && nodes[i].used) {         printf( 1 n );       } else {         printf( 0 n );       }     }     return 0;   }   