#include <bits/stdc++.h>
using namespace std;
const int INF = 2147483647;
int k, len[20], i, j, l, vis[20], tab[20][5005], mat[20], q, ss, totSum, newSum;
long long suma, sum[20], miss, dest;
pair<int, int> act, newAct, result[20], bat[1 << 15], bat2[1 << 15];
map<long long, pair<int, int> > mapa;
vector<pair<int, int> > v, vv[20][5005];
void go(int w) {
  if (bat2[w].second == -1) {
    for (int i = 0; i < vv[bat[w].first][bat[w].second].size(); i++) {
      int j = (i - 1 + vv[bat[w].first][bat[w].second].size()) %
              vv[bat[w].first][bat[w].second].size();
      result[vv[bat[w].first][bat[w].second][i].first] =
          pair<int, int>(tab[vv[bat[w].first][bat[w].second][i].first]
                            [vv[bat[w].first][bat[w].second][i].second],
                         vv[bat[w].first][bat[w].second][j].first + 1);
    }
    return;
  }
  go(bat2[w].first);
  go(bat2[w].second);
}
int main() {
  scanf("%d", &k);
  suma = 0;
  for (i = 0; i < k; i++) {
    scanf("%d", &len[i]);
    sum[i] = 0;
    for (j = 0; j < len[i]; j++) {
      scanf("%d", &tab[i][j]);
      sum[i] += tab[i][j];
      mapa[tab[i][j]] = pair<int, int>(i, j);
    }
    suma += sum[i];
  }
  if (suma % k != 0) {
    printf("No\n");
    return 0;
  }
  dest = suma / k;
  for (i = 0; i < (1 << k); i++) bat[i] = bat2[i] = pair<int, int>(-1, -1);
  for (i = 0; i < k; i++)
    if (sum[i] != dest) {
      for (j = 0; j < len[i]; j++) {
        for (l = 0; l < 15; l++) vis[l] = 0;
        act = pair<int, int>(i, j);
        v.clear();
        while (true) {
          vis[act.first] = 1;
          v.push_back(act);
          newSum = sum[act.first] - tab[act.first][act.second];
          miss = dest - newSum;
          if (mapa.find(miss) == mapa.end()) break;
          newAct = mapa[miss];
          if (vis[newAct.first]) {
            if (newAct.first == i && newAct.second == j && v.size() > 1) {
              vv[i][j] = v;
              l = 0;
              for (auto& w : v) {
                l += (1 << w.first);
              }
              if (bat[l].first == -1) {
                bat[l] = pair<int, int>(i, j);
                bat2[l] = pair<int, int>(0, -1);
              }
            }
            break;
          }
          act = newAct;
        }
      }
    } else {
      vv[i][0].push_back(pair<int, int>(i, 0));
      bat[1 << i] = pair<int, int>(i, 0);
      bat2[1 << i] = pair<int, int>(0, -1);
    }
  for (i = 1; i < (1 << k); i++)
    if (bat2[i].first == -1) {
      l = 0;
      totSum = 0;
      for (j = 0; j < k; j++)
        if ((1 << j) & i) {
          mat[l++] = j;
          totSum += (1 << j);
        }
      for (j = 1; j < (1 << l); j++)
        if (__builtin_popcount(j) * 2 <= l) {
          ss = 0;
          for (q = 0; q < l; q++)
            if ((1 << q) & j) ss += (1 << mat[q]);
          if (bat2[ss].first != -1 && bat2[totSum - ss].first != -1) {
            bat2[i] = pair<int, int>(ss, totSum - ss);
            break;
          }
        }
    }
  if (bat2[(1 << k) - 1].first == -1) {
    printf("No\n");
    return 0;
  }
  printf("Yes\n");
  go((1 << k) - 1);
  for (i = 0; i < k; i++) printf("%d %d\n", result[i].first, result[i].second);
  return 0;
}
