func_code_string: #include <bits/stdc++.h>   using namespace std;   const int inf = 0x3f3f3f3f;   const int maxn = 300000 + 10;   int n, m, s;   struct edge {     bool t;     int u, v;   } es[maxn];   bool vis[maxn];   vector<int> G[maxn];   char ans[maxn];   int cnt;   void dfsmax(int u) {     vis[u] = true;     cnt++;     for (int i = 0; i < G[u].size(); i++) {       edge& e = es[G[u][i]];       if (e.t) {         if (e.u == u) {           if (!vis[e.v]) {             ans[G[u][i]] =  + ;             dfsmax(e.v);           }         } else {           if (!vis[e.u]) {             ans[G[u][i]] =  - ;             dfsmax(e.u);           }         }       } else {         if (!vis[e.v]) {           dfsmax(e.v);         }       }     }   }   void dfsmin(int u) {     vis[u] = true;     cnt++;     for (int i = 0; i < G[u].size(); i++) {       edge& e = es[G[u][i]];       if (e.t) {         if (e.u == u) {           ans[G[u][i]] =  - ;         } else {           ans[G[u][i]] =  + ;         }       } else if (!vis[e.v]) {         dfsmin(e.v);       }     }   }   int main() {     scanf( %d%d%d , &n, &m, &s);     int tmp;     for (int i = 0; i < m; i++) {       scanf( %d%d%d , &tmp, &es[i].u, &es[i].v);       G[es[i].u].push_back(i);       es[i].t = (tmp == 2);       if (tmp == 2) G[es[i].v].push_back(i), ans[i] =  + ;     }     cnt = 0;     dfsmax(s);     printf( %d n , cnt);     for (int i = 0; i < m; i++) {       if (es[i].t) printf( %c , ans[i]);     }     printf(  n );     cnt = 0;     memset(vis, 0, sizeof(vis));     dfsmin(s);     printf( %d n , cnt);     for (int i = 0; i < m; i++) {       if (es[i].t) printf( %c , ans[i]);     }     printf(  n );   }   