#include <bits/stdc++.h>
using namespace std;
const int C = 340;
set<int> e[100010];
int c[100010][C];
int aa[500010][3], ans;
set<pair<int, int> > a;
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) {
    int l;
    scanf("%d", &l);
    for (int j = 0; j < l; j++) {
      int x;
      scanf("%d", &x);
      --x;
      e[i].insert(x);
      c[i][x / C]++;
    }
    e[i].insert(1001001001 + i);
    a.insert(make_pair(l, i));
  }
  int M = (m + C - 1) / C;
  while (1) {
    set<pair<int, int> >::iterator it = a.end();
    --it;
    int xc = it->first, yc = a.begin()->first;
    if (xc - yc < 2) break;
    int x = it->second, y = a.begin()->second, z;
    a.erase(it);
    a.erase(a.begin());
    a.insert(make_pair(xc - 1, x));
    a.insert(make_pair(yc + 1, y));
    for (int i = 0; i < M; i++) {
      if (c[x][i] > c[y][i]) {
        z = i * C;
        --c[x][i];
        ++c[y][i];
        break;
      }
    }
    set<int>::iterator ix = e[x].lower_bound(z);
    set<int>::iterator iy = e[y].lower_bound(z);
    while (*iy < z + C && *ix >= *iy) {
      while (*iy<z + C&& * ix> * iy) {
        ++iy;
      }
      while (*ix == *iy) {
        ++ix;
        ++iy;
      }
    }
    aa[ans][2] = *ix;
    e[x].erase(ix);
    e[y].insert(aa[ans][2]);
    aa[ans][0] = x;
    aa[ans][1] = y;
    ans++;
  }
  printf("%d\n", ans);
  for (int i = 0; i < ans; i++) {
    printf("%d %d %d\n", aa[i][0] + 1, aa[i][1] + 1, aa[i][2] + 1);
  }
  return 0;
}
