#include <bits/stdc++.h>
using namespace std;
int n, m;
int tot = 1;
int b[200005], e[200005], h[200005], p[200005], u[200005];
vector<int> ans[200005];
void add(int x, int y) {
  b[++tot] = y;
  e[tot] = h[x];
  h[x] = tot;
}
void dfs(int k, int fa_edge) {
  p[k] = 1;
  for (int go = h[k]; go; go = e[go])
    if (b[go] != b[fa_edge]) {
      if (p[b[go]] == 0) dfs(b[go], go ^ 1);
      if (u[go] == 0) ans[k].push_back(b[go]), u[go] = u[go ^ 1] = 1;
    }
  int sum = ans[k].size();
  if (sum & 1)
    sum++, ans[k].push_back(b[fa_edge]), u[fa_edge] = u[fa_edge ^ 1] = 1;
  for (int i = 0; i < sum; i += 2)
    printf("%d %d %d\n", ans[k][i] + 1, k + 1, ans[k][i + 1] + 1);
}
int main() {
  scanf("%d%d", &n, &m);
  if (m % 2) {
    printf("No solution");
    return 0;
  }
  int x, y;
  for (int i = 0; i < m; i++) {
    scanf("%d%d", &x, &y);
    add(--x, --y);
    add(y, x);
  }
  dfs(0, -1);
  return 0;
}
