#include <bits/stdc++.h>
using namespace std;
int main() {
  cout.precision(30);
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n, m;
  cin >> n >> m;
  long long sum = 0;
  vector<vector<long long>> a(n);
  for (int i = 0; i < n; i++) {
    int s;
    cin >> s;
    sum += s;
    while (s--) {
      int b;
      cin >> b;
      b--;
      a[i].push_back(b);
    }
  }
  vector<pair<vector<long long>, int>> cc(n);
  for (int i = 0; i < n; i++) {
    cc[i] = {a[i], i};
  }
  sort(cc.begin(), cc.end(),
       [&](pair<vector<long long>, int> a, pair<vector<long long>, int> b) {
         return a.first.size() > b.first.size();
       });
  vector<long long> num(n);
  for (int i = 0; i < n; i++) a[i] = cc[i].first, num[i] = cc[i].second;
  vector<set<long long>> b(n);
  for (int i = 0; i < n; i++) {
    for (auto &j : a[i]) b[i].insert(j);
  }
  vector<long long> need(n);
  for (int i = 0; i < n; i++) {
    if (i < sum % n)
      need[i] = sum / n + 1 - b[i].size();
    else
      need[i] = sum / n - b[i].size();
  }
  sort(need.begin(), need.end());
  int l = 0, r = n;
  for (int i = 0; i < n; i++)
    if (need[i] > 0) {
      r = i;
      break;
    }
  long long rr = r;
  if (r == n) {
    cout << 0;
    exit(0);
  }
  vector<vector<long long>> ans;
  while (l < rr && r < n) {
    vector<long long> to_add;
    for (auto &i : b[r]) {
      if (b[l].count(i)) b[l].erase(i), to_add.push_back(i);
    }
    if (abs(need[l]) > abs(need[r])) {
      vector<long long> to_del;
      for (auto &i : b[l]) {
        if (need[r] == 0) break;
        need[l]++;
        auto x = i;
        to_del.push_back(x);
        b[r].insert(x);
        ans.push_back({num[l], num[r], x});
        need[r]--;
      }
      if (need[r] != 0) cout << l << ' ' << r << "AAAAAAAA\n";
      for (auto &i : to_del) b[l].erase(i);
      for (auto &i : to_add) b[l].insert(i);
      r++;
    } else {
      for (auto &i : b[l]) {
        if (need[l] == 0) break;
        need[l]++;
        auto x = i;
        b[r].insert(x);
        ans.push_back({num[l], num[r], x});
        need[r]--;
      }
      l++;
    }
  }
  cout << ans.size() << endl;
  for (auto &i : ans)
    cout << i[0] + 1 << ' ' << i[1] + 1 << ' ' << i[2] + 1 << '\n';
  return 0;
}
