func_code_string: #include <bits/stdc++.h>   using namespace std;   int k;   long long s[16], sum;   map<long long, int> id;   vector<long long> v;   bool vis[16];   bool dp[1 << 15];   vector<pair<int, int> > way[1 << 15];   int pre[1 << 15];   pair<int, int> ans[16];   int main() {     scanf( %d , &k);     for (int i = 0; i < k; i++) {       int n;       scanf( %d , &n);       while (n--) {         int x;         scanf( %d , &x);         s[i] += x, sum += x;         id[x] = i;         v.push_back(x);       }     }     if (sum % k)       printf( No n );     else {       sum /= k;       for (auto x : v) {         for (int i = 0; i < k; i++) vis[i] = false;         long long now = x;         int mask = 0;         vector<pair<int, int> > opt;         bool f = true;         while (!vis[id[now]]) {           vis[id[now]] = true;           long long pre = now;           now = sum - s[id[now]] + now;           if (id.count(now) == 0) {             f = false;             break;           }           if (vis[id[now]] && now != x) {             f = false;             break;           }           mask |= 1 << id[pre];           opt.push_back(pair<int, int>(now, pre));         }         if (f == true) way[mask] = opt;       }       dp[0] = 1;       for (int i = 1; i < (1 << k); i++) {         for (int j = i - 1; j != i; j = (j - 1) & i) {           if (dp[j] && !way[i ^ j].empty()) {             dp[i] = 1;             pre[i] = j;             break;           }         }       }       if (!dp[(1 << k) - 1])         printf( No n );       else {         printf( Yes n );         int now = (1 << k) - 1;         while (now) {           int x = now ^ (pre[now]);           for (auto p : way[x])             ans[id[p.first]] = pair<int, int>(p.first, id[p.second]);           now = pre[now];         }         for (int i = 0; i < k; i++)           printf( %d %d n , ans[i].first, ans[i].second + 1);       }     }     return 0;   }   