func_code_string: #include <bits/stdc++.h>   using namespace std;   using LL = long long;   void err() { cout << endl; }   template <template <typename...> class T, typename t, typename... Args>   void err(T<t> a, Args... args) {     for (auto x : a) cout << x <<    ;     err(args...);   }   template <typename T, typename... Args>   void err(T a, Args... args) {     cout << a <<    ;     err(args...);   }   struct P {     int a, b, item;   };   const int N = 1E5 + 100;   int n, m, dm[N];   set<int> S[N];   int orders[N];   int main() {     cin >> n >> m;     int tot = 0;     for (decay<decltype(n + 1)>::type i = (1), _i = (n + 1); i < _i; ++i) {       int sz;       scanf( %d , &sz);       for (decay<decltype(sz)>::type j = (0), _j = (sz); j < _j; ++j) {         int x;         scanf( %d , &x);         S[i].insert(x);       }       tot += sz;     }     for (decay<decltype(n + 1)>::type i = (1), _i = (n + 1); i < _i; ++i)       orders[i] = i;     sort(orders + 1, orders + n + 1,          [](const int& x, const int& y) { return S[x].size() > S[y].size(); });     int ll = 1, rr = n;     int at_least = tot / n;     for (decay<decltype(n + 1)>::type i = (1), _i = (n + 1); i < _i; ++i) {       if (i <= tot % n)         dm[orders[i]] = at_least + 1;       else         dm[orders[i]] = at_least;     }     vector<P> gather;     while (ll < rr) {       vector<P> adds;       int rrrrrrrrr = orders[rr], lllllllll = orders[ll];       ;       if (int((S[rrrrrrrrr]).size()) >= dm[rrrrrrrrr] &&           int((S[lllllllll]).size()) <= dm[lllllllll])         break;       vector<set<int>::iterator> vs;       vs.push_back(S[lllllllll].begin());       for (int v : S[rrrrrrrrr]) {         auto it = S[lllllllll].upper_bound(v);         if (it != S[lllllllll].end()) vs.push_back(it);       }       vector<int> dec;       for (auto it : vs)         while (int((S[lllllllll]).size()) - int((dec).size()) > dm[lllllllll] &&                int((S[rrrrrrrrr]).size()) < dm[rrrrrrrrr] &&                S[rrrrrrrrr].find(*it) == S[rrrrrrrrr].end()) {           S[rrrrrrrrr].insert(*it);           dec.push_back(*it++);         }       for (int v : dec) {         S[lllllllll].erase(v);         gather.push_back({lllllllll, rrrrrrrrr, v});       };       if (int((S[lllllllll]).size()) == dm[lllllllll]) ll++;       if (int((S[rrrrrrrrr]).size()) == dm[rrrrrrrrr]) rr--;     }     cout << gather.size() << endl;     for (decay<decltype(gather.size())>::type i = (0), _i = (gather.size());          i < _i; ++i)       printf( %d %d %d n , gather[i].a, gather[i].b, gather[i].item);   }   