#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  int k;
  cin >> k;
  vector<vector<long long>> a(k);
  vector<vector<int>> id(k);
  vector<long long> s(k);
  long long sum = 0;
  for (int i = 0; i < k; i++) {
    int o;
    cin >> o;
    for (int j = 0; j < o; j++) {
      int x;
      cin >> x;
      a[i].push_back(x);
      sum += x;
      s[i] += x;
    }
    sort(a[i].begin(), a[i].end());
  }
  int tot = 0;
  vector<int> fa(N), num(N);
  for (int i = 0; i < k; i++) {
    id[i].resize(a[i].size());
    for (int j = 0; j < id[i].size(); j++)
      id[i][j] = ++tot, fa[tot] = i, num[tot] = a[i][j];
  }
  vector<int> g(tot + 1);
  if (sum % k) return puts("NO"), 0;
  long long z = sum / k;
  for (int i = 0; i < k; i++) {
    for (int v = 0; v < a[i].size(); v++) {
      int x = a[i][v];
      for (int j = 0; j < k; j++) {
        auto o = z - s[i] + x;
        auto it = lower_bound(a[j].begin(), a[j].end(), o);
        if (it != a[j].end() && (*it) == o) {
          g[id[i][v]] = id[j][it - a[j].begin()];
        }
      }
    }
  }
  vector<int> dp(1 << k);
  vector<int> pre(1 << k);
  vector<vector<int>> pp(1 << k);
  for (int i = 1; i <= tot; i++) {
    int u = i;
    vector<int> tmp, vis(k);
    if (!g[u]) continue;
    tmp.push_back(u);
    u = g[u];
    while (u != i) {
      vis[fa[u]] = 1;
      tmp.push_back(u);
      if (g[u] && !vis[fa[g[u]]]) {
        u = g[u];
        continue;
      }
      break;
    }
    if (u != i)
      continue;
    else {
      int st = 0;
      for (int i : tmp) st |= (1 << fa[i]);
      pp[st] = tmp;
      dp[st] = 1;
    }
  }
  dp[0] = 1;
  for (int i = 0; i < (1 << k); i++) {
    for (int j = i; j; j = (j - 1) & i) {
      if (pp[j].size() && dp[i - j] && dp[j]) {
        dp[i] = 1;
        pre[i] = j;
      }
    }
  }
  if (dp[(1 << k) - 1]) {
    cout << "YES" << endl;
    int u = (1 << k) - 1;
    vector<pair<int, pair<int, int>>> ans;
    while (pre[u] != 0) {
      auto tmp = pp[pre[u]];
      for (int j = 0; j < tmp.size(); j++) {
        int o = tmp[j];
        int lst = tmp[(j + tmp.size() - 1) % tmp.size()];
        ans.push_back({fa[o], {num[o], fa[lst] + 1}});
      }
      u = u - pre[u];
    }
    sort(ans.begin(), ans.end());
    for (auto it : ans)
      cout << it.second.first << " " << it.second.second << endl;
  } else {
    cout << "NO" << endl;
  }
}
