#include <bits/stdc++.h>
using namespace std;
int n, m, l;
int pre[200010], other[200010], last[100010];
int flag[100010];
void connect(int x, int y) {
  pre[++l] = last[x];
  last[x] = l;
  other[l] = y;
}
int dfs(int x, int fa) {
  flag[x] = 1;
  int cur(0);
  for (int p = last[x]; p; p = pre[p]) {
    if (other[p] == fa) continue;
    if (flag[other[p]] == 2) continue;
    int edge;
    if (!flag[other[p]])
      edge = dfs(other[p], x);
    else
      edge = 0;
    if (edge)
      printf("%d %d %d\n", x, other[p], edge);
    else if (cur)
      printf("%d %d %d\n", cur, x, other[p]), cur = 0;
    else
      cur = other[p];
  }
  flag[x] = 2;
  return cur;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    connect(x, y);
    connect(y, x);
  }
  if (m & 1)
    printf("No solution\n\n");
  else
    dfs(1, -1);
  return 0;
}
