func_code_string: #include <bits/stdc++.h>   using namespace std;   using namespace std;   vector<pair<pair<int, int>, pair<int, int> > > a[300005];   vector<int> g1[300005];   vector<int> g2[300005];   string Max =   , Min =   ;   int ansMax = 0;   int ansMin = 0;   bool used[300005];   void getMax(int cur) {     ansMax++;     used[cur]++;     for (auto it : g1[cur]) {       if (!used[it]) {         getMax(it);       }     }   }   void getMin(int cur) {     ansMin++;     used[cur]++;     for (auto it : g2[cur]) {       if (!used[it]) {         getMin(it);       }     }   }   void updateMax(int s) {     queue<int> q;     q.push(s);     while (!q.empty()) {       int u = q.front();       q.pop();       if (used[u]) {         continue;       }       used[u]++;       for (auto it : a[u]) {         if (it.first.first == 1) {           if (!used[it.second.second]) {             q.push(it.second.second);             g1[u].push_back(it.second.second);           }         } else {           if (u == it.second.first) {             if (!used[it.second.second]) {               q.push(it.second.second);               g1[u].push_back(it.second.second);             }           } else {             if (!used[it.second.first]) {               q.push(it.second.first);               g1[u].push_back(it.second.first);               Max[it.first.second] =  - ;             }           }         }       }     }   }   void updateMin(int s) {     queue<int> q;     q.push(s);     while (!q.empty()) {       int u = q.front();       q.pop();       if (used[u]) {         continue;       }       used[u]++;       for (auto it : a[u]) {         if (it.first.first == 2) {           if (u == it.second.first) {             if (!used[it.second.second]) {               Min[it.first.second] =  - ;             }           }         }       }       for (auto it : a[u]) {         if (it.first.first == 1 && !used[it.second.second]) {           g2[u].push_back(it.second.second);           q.push(it.second.second);         }       }     }   }   int main() {     int n, m, s;     scanf( %d%d%d , &n, &m, &s);     int i, t, u, v;     int d = 0;     for (i = 0; i < m; i++) {       scanf( %d%d%d , &t, &u, &v);       if (t == 1) {         a[u].push_back({{t, i}, {u, v}});       } else {         a[u].push_back({{t, d}, {u, v}});         a[v].push_back({{t, d}, {u, v}});         d++;         Max +=  + ;         Min +=  + ;       }     }     updateMax(s);     memset(used, 0, sizeof used);     getMax(s);     printf( %d n , ansMax);     cout << Max << endl;     memset(used, 0, sizeof used);     updateMin(s);     memset(used, 0, sizeof used);     getMin(s);     printf( %d n , ansMin);     cout << Min;     return 0;   }   