#include <bits/stdc++.h>
using std::cerr;
using std::cin;
using std::cout;
using std::endl;
using std::make_pair;
using std::pair;
const int K = 15, N = 5010;
int n[K];
long long a[K][N], sig[K];
std::map<long long, pair<int, int> > s;
pair<int, int> g[K][N];
int clr[K][N];
int f[1 << K], from[1 << K];
pair<int, int> plan[1 << K];
int origin[1 << K];
pair<int, int> out[K];
void dfs(int state) {
  if (origin[state]) {
    int x = plan[state].first, y = plan[state].second;
    pair<int, int> n;
    do {
      n = g[x][y];
      out[n.first] = {a[n.first][n.second], x};
      x = n.first, y = n.second;
    } while (x != plan[state].first);
  } else {
    dfs(from[state]);
    dfs(state ^ from[state]);
  }
}
int main() {
  std::ios::sync_with_stdio(0);
  cout.tie(0);
  int k;
  cin >> k;
  long long avg = 0;
  for (int i = 0; i < (k); ++i) {
    cin >> n[i];
    for (int j = 0; j < (n[i]); ++j) {
      cin >> a[i][j];
      sig[i] += a[i][j];
      s[a[i][j]] = {i, j};
    }
    avg += sig[i];
  }
  if (avg % k != 0) {
    cout << "No";
    return 0;
  }
  avg /= k;
  for (int i = 0; i < (k); ++i)
    for (int j = 0; j < (n[i]); ++j) {
      long long x = avg - sig[i] + a[i][j];
      if (s.count(x))
        g[i][j] = s[x];
      else
        g[i][j].first = -1;
    }
  int x, y, state, flag;
  pair<int, int> np;
  int cnt = 0;
  for (int i = 0; i < (k); ++i)
    for (int j = 0; j < (n[i]); ++j) {
      if (clr[i][j]) continue;
      x = i, y = j;
      clr[x][y] = ++cnt;
      while (g[x][y].first != -1) {
        np = g[x][y];
        x = np.first, y = np.second;
        if (clr[x][y] == cnt) {
          state = 0, flag = 1;
          int ox = x, oy = y;
          do {
            if (state & (1 << x)) {
              flag = 0;
              break;
            }
            state |= (1 << x);
            np = g[x][y];
            x = np.first, y = np.second;
          } while (x != ox || y != oy);
          if (flag) f[state] = origin[state] = 1, plan[state] = {x, y};
          break;
        } else if (clr[x][y] != 0)
          break;
        clr[x][y] = cnt;
      }
    }
  f[0] = 1;
  for (int i = 1; i < (1 << k); ++i) {
    for (int j = i; j && !f[i]; j = ((j - 1) & i)) {
      if (f[j] && f[i ^ j]) {
        f[i] = 1;
        from[i] = j;
      }
    }
  }
  if (!f[(1 << k) - 1]) {
    cout << "No";
    return 0;
  }
  cout << "Yes\n";
  dfs((1 << k) - 1);
  for (int i = 0; i < (k); ++i) {
    cout << out[i].first << ' ' << out[i].second + 1 << endl;
  }
  return 0;
}
