func_code_string: #include <bits/stdc++.h>   using namespace std;   template <class T>   void pv(T a, T b) {     for (T i = a; i != b; ++i) cout << *i <<    ;     cout << endl;   }   template <class T>   void chmin(T &t, T f) {     if (t > f) t = f;   }   template <class T>   void chmax(T &t, T f) {     if (t < f) t = f;   }   int in() {     int x;     scanf( %d , &x);     return x;   }   int uf[110];   int root(int x) { return (uf[x] < 0) ? x : (uf[x] = root(uf[x])); }   bool conn(int x, int y) {     x = root(x);     y = root(y);     if (x == y) return 0;     if (uf[x] > uf[y]) swap(x, y);     uf[x] += uf[y];     uf[y] = x;     return 1;   }   int N, M;   int A[10010], B[10010];   int len;   int usLens[110];   int us[110][110];   int main() {     int i;     int u, v;     int j, k;     for (; ~scanf( %d%d , &N, &M);) {       for (i = 0; i < M; ++i) {         A[i] = in() - 1;         B[i] = in() - 1;       }       memset(uf, ~0, N << 2);       for (i = 0; i < M; ++i) {         conn(A[i], B[i]);       }       len = 0;       memset(usLens, 0, sizeof(usLens));       for (u = 0; u < N; ++u)         if (uf[u] < 0) {           if (-uf[u] > 3) {             goto failed;           }           if (-uf[u] < 2) {             continue;           }           for (v = 0; v < N; ++v)             if (root(v) == u) {               us[len][usLens[len]++] = v;             }           ++len;         }       if (len > N / 3) {         goto failed;       }       for (u = 0; u < N; ++u)         if (uf[u] < 0) {           if (-uf[u] < 2) {             for (j = 0; j < N / 3; ++j) {               if (usLens[j] < 3) {                 us[j][usLens[j]++] = u;                 break;               }             }           }         }       for (j = 0; j < N / 3; ++j) {         for (k = 0; k < 3; ++k) {           if (k) printf(   );           printf( %d , us[j][k] + 1);         }         puts(  );       }       continue;     failed:;       puts( -1 );     }     return 0;   }   