#include <bits/stdc++.h>
using namespace std;
const int MAXK = 16;
const int MAXN = 5010 * MAXK;
int N;
int k;
long long int arr[MAXN];
long long int sum[MAXK];
long long int total;
int box_num[MAXN];
map<long long int, int> item_num;
int nxt[MAXN];
int visited[MAXN];
vector<int> cyc_items[1 << MAXK];
int prv[1 << MAXK];
void file_io(char *input, char *output) {
  freopen(input, "r", stdin);
  freopen(output, "w", stdout);
}
void fast_io() {
  ios::sync_with_stdio(false);
  cin.tie(0);
}
void input() {
  cin >> k;
  for (int i = 0; i <= k - 1; ++i) {
    int n;
    cin >> n;
    for (int j = 0; j <= n - 1; ++j) {
      cin >> arr[N];
      box_num[N] = i;
      sum[i] += arr[N];
      total += arr[N];
      item_num[arr[N]] = N;
      N++;
    }
  }
}
void check_cycle() {
  for (int i = 0; i <= N - 1; ++i) {
    long long int nxt_a = total - (sum[box_num[i]] - arr[i]);
    if (!item_num.count(nxt_a)) {
      nxt[i] = -1;
    } else {
      nxt[i] = item_num[nxt_a];
    }
  }
  for (int i = 0; i <= N - 1; ++i) {
    if (visited[i]) continue;
    int cur = i;
    visited[cur] = i + 1;
    while (true) {
      cur = nxt[cur];
      if (cur == -1) break;
      if (visited[cur] == i + 1)
        break;
      else if (visited[cur]) {
        cur = -1;
        break;
      }
      visited[cur] = i + 1;
    }
    if (cur == -1) {
      continue;
    }
    int st = cur;
    int mask = 0;
    vector<int> cyc;
    do {
      if (mask & (1 << box_num[cur])) {
        mask = -1;
        break;
      } else {
        mask |= (1 << box_num[cur]);
      }
      cyc.push_back(cur);
      cur = nxt[cur];
    } while (cur != st);
    if (mask == -1) {
      continue;
    }
    cyc_items[mask] = cyc;
  }
  for (int m = 1; m < (1 << k); ++m) {
    prv[m] = -1;
    for (int v = m; v > 0; v = (v - 1) & m) {
      if (!cyc_items[v].empty() && prv[m ^ v] != -1) {
        prv[m] = v;
        break;
      }
    }
  }
}
void solve() {
  if (total % k != 0) {
    cout << "No\n";
    return;
  }
  total /= k;
  check_cycle();
  if (prv[(1 << k) - 1] == -1) {
    cout << "No\n";
    return;
  }
  cout << "Yes\n";
  vector<pair<long long int, long long int> > ans(k);
  for (int m = (1 << k) - 1; m > 0; m ^= prv[m]) {
    vector<int> cyc = cyc_items[prv[m]];
    for (int i = 0; i < int(cyc.size()); ++i) {
      int cur = cyc[i], nxt = cyc[(i + 1) % int(cyc.size())];
      ans[box_num[nxt]] = {arr[nxt], box_num[cur]};
    }
  }
  for (int i = 0; i <= k - 1; ++i) {
    cout << ans[i].first << " " << ans[i].second + 1 << endl;
  }
}
int main() {
  fast_io();
  input();
  solve();
  return 0;
}
