#include <bits/stdc++.h>
using namespace std;
long long k, n[20], a[20][5005], second, fi[20];
pair<long long, pair<long long, pair<long long, long long> > > dp[50005];
unordered_map<long long, long long> ind, g, fix;
pair<long long, long long> ans[20];
void solve(long long x) {
  if (dp[x].second.first == 0) {
    long long y = dp[x].second.second.second;
    ans[ind[g[y]]] = make_pair(g[y], ind[y]);
    y = g[y];
    long long p = 0;
    while (y != dp[x].second.second.second) {
      p++;
      if (p > 1000000) {
        cout << p << endl;
        cout << y << " " << g[y] << endl;
        exit(0);
      }
      ans[ind[g[y]]] = make_pair(g[y], ind[y]);
      y = g[y];
    }
    return;
  }
  solve(dp[x].second.second.first);
  solve(dp[x].second.second.second);
}
int main() {
  ios::sync_with_stdio(false);
  cin >> k;
  for (int i = 1; i <= k; i++) {
    cin >> n[i];
    for (int j = 1; j <= n[i]; j++) {
      cin >> a[i][j];
      second += a[i][j];
      ind[a[i][j]] = i;
    }
  }
  if ((second % k) != 0) {
    cout << "No";
    return 0;
  }
  second /= k;
  for (int i = 1; i <= k; i++) {
    long long cur = 0;
    for (int j = 1; j <= n[i]; j++) cur += a[i][j];
    for (int j = 1; j <= n[i]; j++) {
      long long y = second - (cur - a[i][j]);
      g[a[i][j]] = y;
    }
  }
  for (int i = 1; i <= k; i++) {
    for (int j = 1; j <= n[i]; j++) {
      long long x = a[i][j], b = 0;
      for (int l = 1; l <= 15; l++) fi[l] = 0;
      bool ok = 1, pp = 1;
      while (x != a[i][j] || pp) {
        pp = 0;
        if (fi[ind[x]] == 1) {
          ok = 0;
          break;
        }
        fi[ind[x]] = 1;
        b |= (1 << (ind[x] - 1));
        x = g[x];
        if (ind[x] == 0) {
          ok = 0;
          break;
        }
      }
      if (!ok) continue;
      dp[b] = make_pair(1, make_pair(0, make_pair(i, x)));
    }
  }
  long long raod = 0;
  for (int i = 1; i < (1 << k); i++) {
    if (dp[i].first == 1) continue;
    for (int sub = i; sub; sub = (sub - 1) & i) {
      int x = i ^ sub;
      if (dp[sub].first * dp[x].first != 1) continue;
      dp[i] = make_pair(1, make_pair(1, make_pair(sub, x)));
    }
  }
  if (dp[(1 << k) - 1].first != 1) {
    cout << "No";
    return 0;
  }
  solve((1 << k) - 1);
  cout << "Yes\n";
  for (int i = 1; i <= k; i++) {
    cout << ans[i].first << " " << ans[i].second << '\n';
  }
  return 0;
}
