func_code_string: #include <bits/stdc++.h>   using namespace std;   const int C = 500001;   vector<vector<int> > gr(C), E(C);   int ij[C], ji[C], a, b, n, m;   int s[C], sE[C], low[C], pre[C], nV[C], nE[C], par[C], cor[C], corn;   bool ch[C], chE[C];   int main() {     int i, j, is = 1, iE = 0, iV = 1, ip = 2, k, e, vn, en;     scanf( %d %d , &n, &m);     for (int z = 0; z < m; z++)       scanf( %d %d , &a, &b), gr[a].push_back(b), gr[b].push_back(a),           E[a].push_back(z), E[b].push_back(z), ij[a]++, ij[b]++;     for (i = 1; i <= n; i++) ji[i] = ij[i];     for (j = 1; j <= n; j++) {       if (ch[j] == 0) {         s[0] = j, ch[j] = 1;         low[j] = pre[j] = 1, iV = 1, iE = 0, ip = 2, is = 1;         while (is > 0) {           a = s[is - 1];           if (ij[a] > 0) k = gr[a][ij[a] - 1], e = E[a][ij[a] - 1];           if (ij[a] > 0 && ch[gr[a][ij[a] - 1]] == 1) {             if (chE[e] == 0) {               chE[e] = 1;               sE[iE] = e, iE++;             }             if (k != par[a]) low[a] = min(low[a], pre[k]);             ij[a]--;           } else if (ij[a] > 0 && ch[gr[a][ij[a] - 1]] == 0) {             ch[k] = 1, chE[e] = 1;             par[k] = a;             nV[k] = iV, nE[k] = iE, iV++;             sE[iE] = e, iE++;             s[is] = k, low[k] = pre[k] = ip, is++, ip++;             ij[a]--;           } else {             if (low[par[a]] > low[a]) low[par[a]] = low[a];             if (low[a] >= pre[par[a]]) {               vn = iV - nV[a] + 1, en = iE - nE[a];               if (en == vn) {                 for (i = nE[a]; i < iE; i++) cor[sE[i]] = 1, corn++;               }               iV = nV[a], iE = nE[a];             }             is--;           }         }       }     }     printf( %d n , corn);     for (i = 0; i < m; i++)       if (cor[i] == 1) printf( %d  , i + 1);     return 0;   }   