text: Examples Input 8 12 1 2 2 3 3 4 4 1 1 3 2 4 3 5 3 6 5 6 6 7 6 8 7 8 Output 1 2 4 1 3 2 1 4 3 5 3 6 5 6 8 6 7 8 Input 3 3 1 2 2 3 3 1 Output No solution Input 3 2 1 2 2 3 Output 1 2 3 # Solution #include <bits/stdc++.h> using namespace std; int n, m; int visit[111111]; vector<int> v[111111], mark[111111]; int dfs(int t) { vector<int> v1; int i; for (i = 0; i < v[t].size(); i++) { int u = v[t][i]; if (visit[mark[t][i]] == 0) { visit[mark[t][i]] = 1; int w = dfs(u); if (w == 0) v1.push_back(u); else printf("%d %d %d\n", t, u, w); } } while (v1.size() > 1) { printf("%d %d %d\n", v1[v1.size() - 1], t, v1[v1.size() - 2]); v1.pop_back(); v1.pop_back(); } if (v1.size() == 1) return v1[0]; else return 0; } int main() { memset(visit, 0, sizeof(visit)); scanf("%d%d", &n, &m); int i; for (i = 0; i < m; i++) { int a, b; scanf("%d%d", &a, &b); v[a].push_back(b); v[b].push_back(a); mark[a].push_back(i); mark[b].push_back(i); } if (m % 2) printf("No solution\n"); else { for (i = 1; i <= n; i++) dfs(i); } }