func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxN = 1e5 + 7;   int n, m;   vector<tuple<int, int, int>> res;   vector<pair<int, int>> g[maxN];   bool blocked[maxN];   bool solve(int v, int pr = -1) {     vector<int> unpaired;     vector<int> adj;     for (auto& to : g[v]) {       if (!blocked[to.second]) {         adj.push_back(to.first);       }       blocked[to.second] = true;     }     for (auto& to : adj) {       if (solve(to, v)) {         unpaired.push_back(to);       }     }     while (unpaired.size() >= 2) {       int first = unpaired.back();       unpaired.pop_back();       int second = unpaired.back();       unpaired.pop_back();       res.push_back(make_tuple(first, v, second));     }     if (unpaired.size() > 0) {       int vertex = unpaired.back();       unpaired.pop_back();       res.push_back(make_tuple(pr, v, vertex));       return false;     }     return true;   }   int main() {     scanf( %d %d , &n, &m);     if (m % 2 == 1) {       printf( No solution n );       return 0;     }     for (int i = 0; i < m; ++i) {       int a, b;       scanf( %d %d , &a, &b);       g[a].push_back({b, i});       g[b].push_back({a, i});     }     solve(1);     for (auto& x : res) {       printf( %d %d %d n , get<0>(x), get<1>(x), get<2>(x));     }     return 0;   }   