#include <bits/stdc++.h>
using namespace std;
const long long N = 16;
vector<long long> g[N];
unordered_map<long long, long long> pos;
bool dp[1 << N];
long long l[1 << N];
long long vis[N];
long long rem[1 << N][N];
long long mask = 0;
long long target = 0;
long long summ[N];
long long c[N], p[N];
bool dfs(long long v, long long c) {
  if (vis[c] == v) {
    rem[mask][c] = v;
    return true;
  } else if (vis[c] != -1) {
    return false;
  }
  vis[c] = v;
  mask |= (1 << c);
  long long u = target - (summ[c] - v);
  if (pos.count(u)) {
    if (dfs(u, pos[u])) {
      rem[mask][c] = v;
      return true;
    }
  }
  return false;
}
long long k;
void restore(long long v, long long j) {
  long long u = target - (summ[j] - v);
  c[pos[u]] = u;
  p[pos[u]] = j + 1;
  if (mask & (1 << j)) {
    return;
  }
  mask |= (1 << j);
  restore(u, pos[u]);
}
void restore(long long m) {
  if (l[m] == -1) {
    for (long long i = 0; i < k; i++) {
      if (m & (1 << i)) {
        mask = 0;
        long long v = rem[m][i];
        restore(v, i);
        break;
      }
    }
  } else {
    restore(l[m]);
    restore(m ^ l[m]);
  }
}
signed main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  fill(&rem[0][0], &rem[(1 << N) - 1][0], -1);
  fill(&l[0], &l[(1 << N) - 1], -1);
  cin >> k;
  for (long long i = 0; i < k; i++) {
    long long n;
    cin >> n;
    for (long long j = 0; j < n; j++) {
      long long x;
      cin >> x;
      summ[i] += x;
      pos[x] = i;
      g[i].push_back(x);
    }
    target += summ[i];
  }
  if (target % k) return cout << "No\n", 0;
  target /= k;
  for (long long i = 0; i < k; i++) {
    for (long long j = 0; j < g[i].size(); j++) {
      mask = 0;
      for (long long r = 0; r < k; r++) vis[r] = -1;
      if (dfs(g[i][j], i)) dp[mask] = true;
    }
  }
  dp[0] = true;
  for (long long i = 0; i < (1 << k); i++) {
    if (dp[i]) continue;
    for (long long j = i; j > 0; j = (j - 1) & i) {
      if (dp[i ^ j] && dp[j]) {
        dp[i] = true, l[i] = j;
        break;
      }
    }
  }
  restore((1 << k) - 1);
  for (long long i = 0; i < k; i++) {
    if (p[i] == 0) dp[(1 << k) - 1] = false;
  }
  cout << (dp[(1 << k) - 1] ? "Yes\n" : "No\n");
  if (!dp[(1 << k) - 1]) return 0;
  for (long long i = 0; i < k; i++) cout << c[i] << ' ' << p[i] << '\n';
}
