func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m, tot, res = 0, f[666666], g[666666], q[666666], ans[666666][3];   struct edge {     int adj, nex;     bool vis;     edge(int a_ = 0, int n_ = 0) {       adj = a_;       nex = n_;       vis = false;     }   } e[666666];   void add(int u, int v) {     e[++tot] = edge(v, e[u].nex);     e[u].nex = tot;     e[++tot] = edge(u, e[v].nex);     e[v].nex = tot;   }   void bfs(int x) {     int l = 0, r = 1;     q[1] = x;     f[x] = -1;     while (l < r) {       for (int i = e[q[++l]].nex; i; i = e[i].nex) {         if (!f[e[i].adj]) {           q[++r] = e[i].adj;           f[e[i].adj] = q[l];         }       }     }     for (int i = r; i; i--) {       g[0] = 0;       for (int j = e[q[i]].nex; j; j = e[j].nex) {         if (!e[j].vis && e[j].adj != f[q[i]]) {           g[++g[0]] = j;         }       }       for (int j = e[q[i]].nex; j; j = e[j].nex) {         if (!e[j].vis && e[j].adj == f[q[i]]) {           g[++g[0]] = j;           break;         }       }       for (int j = 1; j < g[0]; j += 2) {         e[g[j]].vis = e[g[j] ^ 1].vis = e[g[j + 1]].vis = e[g[j + 1] ^ 1].vis =             true;         ans[++res][0] = e[g[j]].adj;         ans[res][1] = q[i];         ans[res][2] = e[g[j + 1]].adj;       }     }   }   int main() {     int u, v;     scanf( %d%d , &n, &m);     tot = n | 1;     for (int i = 1; i <= m; i++) {       scanf( %d%d , &u, &v);       add(u, v);     }     for (int i = 1; i <= n; i++) {       if (!f[i]) {         bfs(i);       }     }     printf( %d n , res);     for (int i = 1; i <= res; i++) {       printf( %d %d %d n , ans[i][0], ans[i][1], ans[i][2]);     }     return 0;   }   