#include <bits/stdc++.h>
using namespace std;
vector<int> con[110000];
int vis[110000], visE[110000], chk[110000];
int prv[110000], arr[110000][5];
int R[110000], RN;
int rn, q[110000 * 2];
int n, m;
int st, en;
struct Edge {
  int x, y;
  Edge(int x = 0, int y = 0) : x(x), y(y) {}
} E[110000];
void Push(int a, int b) {
  arr[rn][0] = E[a].x;
  arr[rn][1] = E[a].y;
  arr[rn][2] = E[b].x;
  arr[rn][3] = E[b].y;
  sort(arr[rn], arr[rn] + 4);
  rn++;
}
bool connect(int a, int b) {
  if (E[a].x == E[b].x || E[a].x == E[b].y || E[a].y == E[b].x ||
      E[a].y == E[b].y) {
    Push(a, b);
    return true;
  }
  return false;
}
void Chk(int e, int x) {
  if (vis[x]) return;
  vis[x] = 1;
  for (int i = 0; i < con[x].size(); i++) {
    int id = con[x][i];
    if (visE[id]) continue;
    visE[id] = 1;
    q[en++] = id;
    prv[id] = e;
  }
}
int main() {
  int i, k, j, x, y;
  int a, b;
  scanf("%d%d", &n, &m);
  for (i = 0; i < m; i++) {
    scanf("%d%d", &x, &y);
    E[i].x = --x;
    E[i].y = --y;
    con[x].push_back(i);
    con[y].push_back(i);
  }
  if (m & 1) {
    puts("No solution");
    return 0;
  }
  q[en++] = 0, visE[0] = 1, prv[0] = -1;
  while (st < en) {
    int e = q[st++];
    Chk(e, E[e].x);
    Chk(e, E[e].y);
  }
  rn = 0;
  for (i = m - 1; i >= 1; i--) {
    RN = 0;
    for (k = i; prv[q[k]] == prv[q[i]]; k--)
      if (!chk[q[k]]) R[RN++] = q[k];
    i = k + 1;
    if (!prv[q[i]]) break;
    for (j = 0; j < RN; j += 2)
      if (j + 1 < RN) Push(R[j], R[j + 1]);
    if (RN & 1) {
      chk[prv[R[RN - 1]]] = 1;
      Push(R[RN - 1], prv[R[RN - 1]]);
    }
  }
  while (RN > 2) {
    int a = R[--RN];
    int b = R[--RN];
    int c = R[--RN];
    if (connect(a, b))
      R[RN++] = c;
    else if (connect(a, c))
      R[RN++] = b;
    else if (connect(b, c))
      R[RN++] = a;
  }
  if (RN == 1)
    Push(R[0], 0);
  else if (RN == 2) {
    puts("No solution");
    return 0;
  }
  for (i = 0; i < rn; i++) {
    for (k = 0; k < 3; k++)
      if (arr[i][k] == arr[i][k + 1]) break;
    int tmp[4], tn(0);
    for (j = 0; j < 4; j++)
      if (j != k && j != k + 1) tmp[tn++] = arr[i][j];
    printf("%d %d %d\n", tmp[0] + 1, arr[i][k] + 1, tmp[1] + 1);
  }
}
