#include <bits/stdc++.h>
using namespace std;
int k, x[22], a[22][5050];
long long sum = 0, s[22];
map<int, int> ma, m;
bool dp[50000];
vector<pair<int, pair<int, int> > > ans[50000];
int main() {
  cin >> k;
  for (int i = 0; i < k; i++) {
    cin >> x[i];
    for (int j = 0; j < x[i]; j++) {
      int tmp;
      cin >> tmp;
      a[i][j] = tmp;
      s[i] += tmp;
      ma[tmp] = i;
    }
    sum += s[i];
  }
  if (abs(sum) % k) {
    cout << "No";
    return 0;
  }
  long long w = sum / k;
  for (int i = 0; i < k; i++) {
    if (s[i] == w) {
      for (int j = 1; j < x[i]; j++) ma.erase(a[i][j]);
      m[a[i][0]] = a[i][0];
    } else
      for (int j = 0; j < x[i]; j++) {
        long long b = w - s[i] + a[i][j];
        if (abs(b) < 1000000001 && ma.count(b) && ma[b] != i)
          m[a[i][j]] = b;
        else
          ma.erase(a[i][j]);
      }
  }
  vector<int> res;
  for (const auto& i : m) {
    int mask = 0;
    int v = i.first;
    bool bad = 0, used[22];
    for (int j = 0; j < k; j++) used[j] = 0;
    res.clear();
    while (!used[ma[v]]) {
      used[ma[v]] = 1;
      res.push_back(v);
      if (m.count(v))
        v = m[v];
      else {
        bad = 1;
        break;
      }
    }
    if (!bad && v == i.first) {
      int mask = 0, cur = 1;
      for (int j = 0; j < k; j++) {
        if (used[j]) mask += cur;
        cur <<= 1;
      }
      if (!dp[mask]) {
        dp[mask] = 1;
        for (int j = 0; j < res.size(); j++)
          if (j + 1 < res.size())
            ans[mask].push_back({ma[res[j + 1]], {ma[res[j]], res[j + 1]}});
          else
            ans[mask].push_back({ma[res[0]], {ma[res[j]], res[0]}});
      }
    }
  }
  int maxn = (1 << k);
  for (int i = 1; i < maxn; i++) {
    for (int j = i; j; j = (j - 1) & i) {
      if (dp[j] && dp[i ^ j] && !dp[i]) {
        dp[i] = 1;
        ans[i] = ans[i ^ j];
        ans[i].insert(ans[i].end(), ans[j].begin(), ans[j].end());
      }
    }
  }
  int mask = (1 << k) - 1;
  if (!dp[mask]) {
    cout << "No";
    return 0;
  }
  sort(ans[mask].begin(), ans[mask].end());
  cout << "Yes" << endl;
  for (int i = 0; i < k; i++)
    cout << ans[mask][i].second.second << " " << ans[mask][i].second.first + 1
         << endl;
  return 0;
}
