func_code_string: #include <bits/stdc++.h>   using namespace std;   int k, n[20], a[20][5010], g[32768], f[32768], hsh[301781], ps[301781],       ans1[20], ans2[20], vis[20], TMS;   pair<int, int> md[32768];   long long sm[20];   int get(int x) {     int y = (x + 1000000001) % 301781;     while (hsh[y] && hsh[y] ^ x + 1000000001) y = (y + 1) % 301781;     return y;   }   void dg(int x, int s1, int s2) {     if (x == k) {       f[s2 + s1] |= f[s1] * g[s2];       return;     }     dg(x + 1, s1, s2);     dg(x + 1, s1, s2 + (1 << x));     dg(x + 1, s1 + (1 << x), s2);   }   int main() {     scanf( %d , &k);     long long S = 0;     for (int i = 0; i < k; ++i) {       scanf( %d , n + i);       for (int j = 0; j < n[i]; ++j) {         int x;         scanf( %d , &x);         a[i][j] = x;         sm[i] += x;         S += x;         int w = get(x);         ps[w] = i;         hsh[w] = x + 1000000001;       }     }     if (S % k != 0) {       printf( No );       return 0;     }     S /= k;     for (int i = 0; i < k; ++i)       for (int j = 0; j < n[i]; ++j) {         int st = 1 << i, nw = i;         long long c = S - (sm[i] - a[i][j]);         int P = 1;         ++TMS;         for (;;) {           vis[nw] = TMS;           if (abs(c) > 1000000000) {             P = 0;             break;           }           int w = get(c);           if (!hsh[w]) {             P = 0;             break;           }           st |= 1 << ps[w];           if (ps[w] == i) {             P = c == a[i][j];             break;           }           c = S - (sm[ps[w]] - c);           nw = ps[w];           if (vis[nw] == TMS) {             P = 0;             break;           }         }         if (P) {           md[st] = make_pair(i, j);           g[st] = 1;         }       }     f[0] = 1;     dg(0, 0, 0);     if (f[(1 << k) - 1]) {       printf( Yes n );       int ST = (1 << k) - 1;       while (ST) {         for (int _ = ST; _; _ = (_ - 1) & ST)           if (g[_] * f[ST - _]) {             int i = md[_].first, j = md[_].second, nw = i;             long long c = S - (sm[i] - a[i][j]), ls = a[i][j];             for (;;) {               int w = get(c);               ans1[ps[w]] = c;               ans2[ps[w]] = nw;               if (ps[w] == i) break;               ls = c;               nw = ps[w];               c = S - (sm[ps[w]] - c);             }             ST -= _;             break;           }       }       for (int i = 0; i < k; ++i) printf( %d %d n , ans1[i], ans2[i] + 1);     } else {       printf( No );     }   }   