#include <bits/stdc++.h>   using namespace std;   const long long BIG = 1000000000000000000LL;   void solve();   signed main() {     ios::sync_with_stdio(false);     cin.tie(0);     solve();     return 0;   }   long long nbBoxes;   long long reqSom = 0;   bool cycor[1 << 15];   pair<long long, pair<long long, long long> > cymem[1 << 15];   long long dpGo[1 << 15];   long long origSom[15];   vector<long long> yolo[15];   map<long long, long long> loc;   map<long long, long long> ds;   vector<long long> maskOk;   pair<long long, long long> finRes[15];   long long osef[15];   long long getMap(long long x) {     auto it = loc.find(x);     if (it == loc.end())       return -1;     else       return it->second;   }   void tester(long long dep, long long valEnvoi, long long suiv,               bool act = false) {     if (dep == suiv) {       if (origSom[dep] == reqSom) {         cycor[1LL << dep] = true;         cymem[1LL << dep] = {dep, {valEnvoi, suiv}};         if (act) finRes[dep] = {dep, osef[dep]};       }       return;     }     long long gauche = dep;     long long cg = reqSom - (origSom[dep] - valEnvoi);     long long mask = (1LL << gauche);     if (act) finRes[dep] = {suiv, valEnvoi};     while (true) {       long long prev = gauche;       gauche = getMap(cg);       if (gauche != -1 && act) finRes[gauche] = {prev, cg};       if (gauche == -1 || gauche == dep) break;       if (mask & (1LL << gauche)) break;       cg = reqSom - (origSom[gauche] - cg);       mask |= (1LL << gauche);     }     if (gauche == dep && cg == valEnvoi) {       cycor[mask] = true;       cymem[mask] = {dep, {valEnvoi, suiv}};     }   }   void solve() {     cin >> nbBoxes;     for (long long i = (0); i < (nbBoxes); ++i) {       long long ni;       cin >> ni;       for (long long i00 = (0); i00 < (ni); ++i00) {         long long x;         cin >> x;         yolo[i].push_back(x);         reqSom += x;         origSom[i] += x;         loc[x] = i;         osef[i] = x;       }     }     if (reqSom % nbBoxes != 0) {       cout <<  No n ;       return;     }     reqSom /= nbBoxes;     for (long long i = (0); i < (nbBoxes); ++i) {       for (long long x : yolo[i]) {         tester(i, x, -1);         tester(i, x, i);       }     }     for (long long i = (0); i < ((1 << 15)); ++i) {       dpGo[i] = -1;     }     dpGo[0] = 0;     for (long long mask = 1; mask < (1 << 15); ++mask) {       for (long long s = mask; s > 0; s = ((s - 1) & mask)) {         if (cycor[s] && dpGo[mask ^ s] != -1) {           dpGo[mask] = s;           break;         }       }     }     long long cur = (1LL << nbBoxes) - 1;     while (dpGo[cur] != 0) {       if (dpGo[cur] == -1) {         cout <<  No n ;         return;       }       long long ret = dpGo[cur];       long long dep = cymem[ret].first, valEnv = cymem[ret].second.first,                 suiv = cymem[ret].second.second;       tester(dep, valEnv, suiv, true);       cur ^= ret;     }     cout <<  Yes n ;     for (long long i = (0); i < (nbBoxes); ++i)       cout << finRes[i].second <<     << finRes[i].first + 1 <<   n ;   }   