func_code_string: #include <bits/stdc++.h>   using namespace std;   vector<int> v[300005];   int n, m, s;   int edgeck[300005], Etype[300005];   pair<int, int> E[300005];   int vis[300005];   void bfs() {     memset(vis, 0, sizeof(vis));     queue<int> que;     que.push(s);     while (!que.empty()) {       int now = que.front();       que.pop();       vis[now] = 1;       for (int i = 0; i < v[now].size(); i++) {         int Enum = v[now][i];         int nxt = -1;         if (edgeck[Enum] == -1) {           nxt = E[Enum].second;           if (nxt != now) {             edgeck[Enum] = 0;           } else {             nxt = E[Enum].first;             edgeck[Enum] = 1;           }           if (!vis[nxt]) {             vis[nxt] = 1;             que.push(nxt);           }         } else {           nxt = (edgeck[Enum] == 0 ? E[Enum].second : E[Enum].first);           if (vis[nxt]) continue;           vis[nxt] = 1;           que.push(nxt);         }       }     }     for (int i = 0; i < m; i++) {       if (edgeck[i] == -1) edgeck[i] = 0;     }     int cnt = 0;     for (int i = 1; i <= n; i++) {       if (vis[i]) ++cnt;     }     printf( %d n , cnt);     for (int i = 0; i < m; i++) {       if (Etype[i] != 2) continue;       if (edgeck[i] == 0)         printf( + );       else         printf( - );     }     puts(  );   }   void bfs2() {     memset(vis, 0, sizeof(vis));     queue<int> que;     que.push(s);     while (!que.empty()) {       int now = que.front();       que.pop();       vis[now] = 1;       for (int i = 0; i < v[now].size(); i++) {         int Enum = v[now][i];         int nxt = -1;         if (edgeck[Enum] == -1) {           nxt = E[Enum].second;           if (nxt != now) {             edgeck[Enum] = 1;           } else {             nxt = E[Enum].first;             edgeck[Enum] = 0;           }         } else {           nxt = (edgeck[Enum] == 0 ? E[Enum].second : E[Enum].first);           if (vis[nxt]) continue;           vis[nxt] = 1;           que.push(nxt);         }       }     }     for (int i = 0; i < m; i++) {       if (edgeck[i] == -1) edgeck[i] = 0;     }     int cnt = 0;     for (int i = 1; i <= n; i++) {       if (vis[i]) ++cnt;     }     printf( %d n , cnt);     for (int i = 0; i < m; i++) {       if (Etype[i] != 2) continue;       if (edgeck[i] == 0)         printf( + );       else         printf( - );     }     puts(  );   }   int main() {     memset(edgeck, -1, sizeof(edgeck));     scanf( %d %d %d , &n, &m, &s);     for (int ty, a, b, i = 0; i < m; i++) {       scanf( %d %d %d , &ty, &a, &b);       v[a].push_back(i);       v[b].push_back(i);       if (ty == 1) {         edgeck[i] = 0;       } else {         Etype[i] = 2;       }       E[i] = {a, b};     }     bfs();     for (int i = 0; i < m; i++) {       if (Etype[i] != 2) continue;       edgeck[i] = -1;     }     bfs2();   }   