#include <bits/stdc++.h>
using namespace std;
const int maxn = (1 << 15) + 10;
vector<pair<int, int>> soln[maxn];
bool f[maxn];
vector<int> a[15];
long long b[15];
map<long long, int> int2box;
set<int> xxx;
int n;
pair<int, int> global_soln[15];
int main() {
  scanf("%d", &n);
  long long sum = 0;
  for (int i = 0; i < n; i++) {
    int m, k;
    scanf("%d", &m);
    for (int j = 0; j < m; j++) {
      scanf("%d", &k);
      a[i].push_back(k);
      sum += k;
      b[i] += k;
      int2box[k] = i;
    }
  }
  if (sum % n) {
    printf("No\n");
    return 0;
  }
  sum /= n;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < a[i].size(); j++)
      if (!xxx.count(a[i][j])) {
        vector<pair<int, int>> res;
        res.push_back(make_pair(i, a[i][j]));
        int mask = 0;
        bool flag = true;
        while (1) {
          int last_box = res.back().first;
          long long key = sum - (b[last_box] - res.back().second);
          if (!int2box.count(key)) {
            flag = false;
            break;
          }
          int nxt = int2box[key];
          if (mask & (1 << nxt)) {
            flag = false;
            break;
          }
          mask += (1 << nxt);
          res.push_back(make_pair(nxt, key));
          if (nxt == i) {
            if (key != a[i][j]) flag = false;
            break;
          }
        }
        if (flag) {
          soln[mask] = res;
          for (int d = 0; d < res.size(); d++) xxx.insert((int)res[d].second);
        }
      }
  f[0] = true;
  for (int i = 0; i < (1 << n); i++) {
    if (!soln[i].size()) continue;
    f[i] = true;
    int s = ((1 << n) - 1) ^ i;
    for (int j = s; j; j = (j - 1) & s)
      if (f[j]) f[i | j] = true;
  }
  int s = (1 << n) - 1;
  if (!f[s]) {
    printf("No\n");
    return 0;
  }
  while (s) {
    int k = s;
    for (k = s; k; k = (k - 1) & s)
      if ((soln[k].size()) and (f[s ^ k])) {
        int m = soln[k].size();
        for (int i = 1; i < m; i++) {
          global_soln[soln[k][i].first].first = soln[k][i].second;
          global_soln[soln[k][i].first].second = soln[k][i - 1].first;
        }
        s ^= k;
        break;
      }
  }
  printf("Yes\n");
  for (int i = 0; i < n; i++)
    printf("%d %d\n", global_soln[i].first, global_soln[i].second + 1);
}
