#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ii = pair<int, int>;
constexpr int MX = 5005;
int n[15], a[15][MX], pre[1 << 15];
bitset<MX> vis[15];
bitset<1 << 15> cs, dp;
vector<ii> G[15][MX], ch[1 << 15];
void dfs(int i, int j, int m, vector<ii>& S) {
  m |= (1 << i);
  vis[i][j] = 1;
  S.emplace_back(i, j);
  if (cs[m]) ch[m] = S;
  for (ii v : G[i][j])
    if (!vis[v.first][v.second] && (m & (1 << v.first)) == 0)
      dfs(v.first, v.second, m, S);
  S.pop_back();
}
int main() {
  if (fopen("in", "r")) freopen("in", "r", stdin), freopen("out", "w", stdout);
  cin.tie(0)->sync_with_stdio(0);
  int k;
  cin >> k;
  for (int i = 0; i < k; ++i) {
    cin >> n[i];
    for (int j = 0; j < n[i]; ++j) cin >> a[i][j];
    sort(a[i], a[i] + n[i]);
  }
  ll goal = 0, sum[15];
  for (int i = 0; i < k; ++i) {
    sum[i] = 0;
    for (int j = 0; j < n[i]; ++j) sum[i] += a[i][j];
    goal += sum[i];
  }
  if (goal % k) {
    cout << "No";
    return 0;
  }
  goal /= k;
  for (int i = 0; i < k; ++i) {
    for (int j = 0; j < n[i]; ++j) {
      for (int x = 0; x < k; ++x) {
        auto it = lower_bound(a[x], a[x] + n[i], sum[x] + a[i][j] - goal);
        if (*it == sum[x] + a[i][j] - goal) G[i][j].emplace_back(x, it - a[x]);
      }
    }
  }
  for (int i = 0; i < (1 << k); ++i) {
    ll tot = 0, cnt = 0;
    for (int j = 0; j < k; ++j)
      if (i & (1 << j)) tot += sum[j], ++cnt;
    cs[i] = tot == cnt * goal;
  }
  for (int i = 0; i < k; ++i) {
    for (int j = 0; j < n[i]; ++j) {
      for (int x = 0; x < k; ++x) vis[x].reset();
      vector<ii> S;
      dfs(i, j, 0, S);
    }
  }
  dp[0] = 1;
  for (int i = 0; i < (1 << k); ++i)
    for (int j = i; j > 0; j = (i & (j - 1)))
      if (ch[j].size() && dp[i ^ j]) dp[i] = 1, pre[i] = i ^ j;
  if (!dp[(1 << k) - 1]) {
    cout << "NO";
    return 0;
  }
  cout << "YES\n";
  ii ans[15];
  for (int i = (1 << k) - 1; i > 0; i = pre[i]) {
    int j = i ^ pre[i];
    for (int k = 0; k < ch[j].size(); ++k)
      ans[ch[j][k].first] = ii(a[ch[j][k].first][ch[j][k].second],
                               ch[j][(k + 1) % ch[j].size()].first + 1);
  }
  for (int i = 0; i < k; ++i)
    cout << ans[i].first << ' ' << ans[i].second << '\n';
}
