func_code_string: #include <bits/stdc++.h>   using namespace std;   int rel[50][50], tk[50], vis[50];   int x[20][3], p, alone[50];   int dfs(int i, int r, int n) {     vis[i] = r;     int j, k = 1;     for (j = 1; j <= n; j++) {       if (rel[i][j] && vis[j] == 0) {         k += dfs(j, r, n);       }     }     return k;   }   int main() {     int n, m, i, j, k, l, l1;     scanf( %d , &n);     scanf( %d , &m);     for (i = 1; i <= m; i++) {       scanf( %d , &j);       scanf( %d , &k);       rel[j][k] = 1;       rel[k][j] = 1;     }     l = 0;     for (i = 1; i <= n; i++) {       if (vis[i]) continue;       k = dfs(i, i, n);       if (k > 3) {         printf( -1 );         return 0;       }       if (k == 1) {         l++;         alone[l] = i;       }     }     memset(vis, 0, sizeof(vis));     l1 = 1;     for (i = 1; i <= n; i++) {       if (vis[i]) continue;       k = dfs(i, i, n);       if (k > 1) {         p++;         m = 0;         for (j = 1; j <= n; j++) {           if (vis[j] == i) {             x[p][m] = j;             m++;           }         }         if (k == 2) {           if (l1 > l) {             printf( -1 );             return 0;           }           x[p][2] = alone[l1];           l1++;         }       }     }     p++;     m = 0;     for (i = l1; i <= l; i++) {       x[p][m] = alone[i];       m++;       if (m == 3) {         m = 0;         p++;       }     }     for (i = 1; i < p; i++) {       for (j = 0; j < 3; j++) {         printf( %d  , x[i][j]);       }       printf(  n );     }     return 0;   }   