func_code_string: #include <bits/stdc++.h>   using namespace std;   bool vis[500005];   int low[500005], d[500005], par[500005], rnk[500005], lev[500005], timer;   vector<int> adj[500005], tree[500005];   vector<pair<int, int>> edges;   map<int, map<int, int>> ed, br;   int get(int x) { return (par[x] == x ? x : par[x] = get(par[x])); }   void link(int x, int y) {     x = get(x);     y = get(y);     if (x == y) return;     par[x] = y;   }   void bridge_find(int u, int par) {     timer++;     d[u] = low[u] = timer;     for (auto x : adj[u]) {       if (x == par) continue;       if (d[x] > 0) {         low[u] = min(low[u], d[x]);         if (ed[x][u] == 0) ed[u][x] = 1;       } else {         bridge_find(x, u);         low[u] = min(low[u], low[x]);         if (d[u] < low[x])           br[u][x] = 1, br[x][u] = 1;         else {           ed[u][x] = 1;           link(u, x);         }       }     }   }   void dfs(int child, int par) {     vis[child] = 1;     for (auto x : adj[child]) {       if (x == par) continue;       if (br[x][child]) ed[x][child] = 1;       if (!vis[x]) dfs(x, child);     }   }   int main() {     int n, m;     scanf( %d %d , &n, &m);     for (int i = 1; i <= n; i++) rnk[i] = 1, par[i] = i;     for (int i = 0; i < m; i++) {       int x, y;       scanf( %d %d , &x, &y);       edges.push_back({x, y});       adj[x].push_back(y);       adj[y].push_back(x);     }     bridge_find(1, -1);     int mx = 0, cur;     for (int i = 1; i <= n; i++) {       int x;       x = get(i);       lev[x]++;       if (mx < lev[x]) {         mx = lev[x], cur = x;       }     }     dfs(cur, -1);     cout << mx << endl;     for (int i = 0; i < m; i++) {       if (ed[edges[i].first][edges[i].second])         cout << edges[i].first <<     << edges[i].second << endl;       else if (ed[edges[i].second][edges[i].first])         cout << edges[i].second <<     << edges[i].first << endl;     }   }   