func_code_string: #include <bits/stdc++.h>   using namespace std;   #pragma GCC optimize( -O3 )   struct vertex {     bool vis = false;     vector<pair<long long int, long long int> > adj;     long long int low = 1000000007;     long long int dp = 0;     long long int parent = -1;   };   long long int tim = 0, n, m;   vector<pair<long long int, long long int> > edges;   bool flag = false;   void dfs(vertex x[], long long int sor) {     x[sor].vis = true;     tim++;     x[sor].dp = tim;     x[sor].low = tim;     for (auto y : x[sor].adj) {       if (!x[y.first].vis) {         x[y.first].parent = sor;         dfs(x, y.first);         x[sor].low = min(x[sor].low, x[y.first].low);         if (x[y.first].low > x[sor].dp)           flag = true;         else           edges[y.second] = {sor, y.first};       } else if (y.first != x[sor].parent) {         x[sor].low = min(x[sor].low, x[y.first].dp);         if (x[y.first].dp < x[sor].dp) {           edges[y.second] = {sor, y.first};         }       }     }   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     cin >> n >> m;     vertex x[n];     for (long long int a = 0; a < m; a++) {       long long int u, v;       cin >> u >> v;       u--, v--;       x[u].adj.push_back({v, a});       x[v].adj.push_back({u, a});       edges.push_back({u, v});     }     dfs(x, 0);     if (flag)       cout << 0 << endl;     else       for (auto y : edges) cout << y.first + 1 <<     << y.second + 1 << endl;     return 0;   }   