func_code_string: #include <bits/stdc++.h>   using namespace std;   int32_t main() {     ios::sync_with_stdio(0);     cout.tie(0);     cin.tie(0);     long long k;     cin >> k;     long long sum = 0;     map<long long, long long> m;     vector<long long> ssum(k, 0), g(5005 * k, -1);     vector<vector<long long>> a(k);     vector<pair<long long, long long>> v;     for (long long i = 0; i < k; ++i) {       long long n;       cin >> n;       a[i].resize(n);       for (long long j = 0; j < n; ++j) {         cin >> a[i][j];         m[a[i][j]] = v.size();         v.emplace_back(a[i][j], i);         ssum[i] += a[i][j];       }       sum += ssum[i];     }     if (sum % k) {       cout <<  No n ;       return 0;     }     sum /= k;     for (long long i = 0; i < k; ++i) {       for (long long j = 0; j < (long long)a[i].size(); ++j) {         if (m.count(sum - ssum[i] + a[i][j])) {           long long id = m[sum - ssum[i] + a[i][j]], u = m[a[i][j]];           if (u != id && v[u].second == v[id].second) continue;           g[u] = id;         }       }     }     long long timer = 0;     vector<long long> dp(1 << k, 0), par(1 << k, 0), head(1 << k, -1);     vector<long long> vis(v.size() + 5, 0);     for (long long i = 0; i < k; ++i) {       for (auto j : a[i]) {         long long mask = 0, u = m[j];         ++timer;         if (vis[u] || g[u] == -1) continue;         while (~u && !vis[u]) {           vis[u] = timer;           u = g[u];         }         if (u == -1 || vis[u] != timer) continue;         long long c = 0, x = u, good = 1;         while (x != u || !c) {           if ((mask >> v[x].second) & 1) good = 0;           mask |= (1 << v[x].second);           x = g[x];           ++c;         }         if (good) {           dp[mask] = 1;           head[mask] = u;         }       }     }     dp[0] = 1;     for (long long i = 0; i < (1 << k); ++i) {       for (long long s = i; s; s = (s - 1) & i) {         if (dp[s] && dp[i ^ s]) {           dp[i] = 1;           par[i] = s;         }       }     }     if (!dp[(1 << k) - 1]) {       cout <<  No n ;       return 0;     }     vector<pair<long long, long long>> ans(k);     function<void(long long)> getans = [&](long long mask) {       if (~head[mask]) {         long long u = head[mask], x = g[u];         ans[v[x].second].first = v[x].first;         ans[v[x].second].second = v[u].second + 1;         while (u != x) {           ans[v[g[x]].second].first = v[g[x]].first;           ans[v[g[x]].second].second = v[x].second + 1;           x = g[x];         }       } else {         getans(par[mask]);         getans(mask ^ par[mask]);       }     };     getans((1 << k) - 1);     cout <<  Yes n ;     for (long long i = 0; i < k; ++i)       cout << ans[i].first <<     << ans[i].second <<   n ;   }   