#include <bits/stdc++.h>
using namespace std;
const int N = 5000 * 15 + 5, B = (1 << 15) + 5;
map<long long, int> mp;
int k, n[20], id[N], kp[N], tot;
int bin[20], x[16][5005], f[B], ok[B], p[B], vis[N], s[N], top;
long long sum[20], S;
vector<int> to[N], re[B];
int l[20], r[20];
void dfs(int u, int st) {
  if (vis[u]) {
    int now = 0;
    for (int i = top; i; i--) {
      now |= bin[id[s[i]] - 1];
      if (u == s[i]) break;
    }
    if (!ok[now]) {
      ok[now] = 1;
      for (int i = top; i; i--) {
        re[now].push_back(s[i]);
        if (u == s[i]) break;
      }
    }
    return;
  }
  if (st & bin[id[u] - 1]) return;
  st |= bin[id[u] - 1], vis[u] = 1, s[++top] = u;
  for (auto v : to[u]) dfs(v, st);
  vis[u] = 0, --top;
}
int main() {
  bin[0] = 1;
  for (int i = 1; i <= 15; i++) bin[i] = bin[i - 1] << 1;
  scanf("%d", &k);
  for (int i = 1; i <= k; i++) {
    scanf("%d", &n[i]);
    for (int j = 1; j <= n[i]; j++)
      scanf("%d", &x[i][j]), mp[x[i][j]] = ++tot, kp[tot] = x[i][j],
                             id[tot] = i, sum[i] += x[i][j];
    S += sum[i];
  }
  if (S % k) {
    puts("No");
    return 0;
  }
  S /= k;
  for (int i = 1; i <= k; i++)
    for (int j = 1; j <= n[i]; j++)
      if (mp.count(S - sum[i] + x[i][j]))
        to[mp[x[i][j]]].push_back(mp[S - sum[i] + x[i][j]]);
  for (int i = 1; i <= tot; i++) dfs(i, 0);
  f[0] = 1;
  for (int i = 0; i < bin[k]; i++)
    if (f[i]) {
      int C = i ^ (bin[k] - 1);
      for (int j = C; j; j = (j - 1) & C)
        if (ok[j]) f[i | j] = 1, p[i | j] = i;
    }
  if (!f[bin[k] - 1]) {
    puts("No");
    return 0;
  }
  int x = bin[k] - 1;
  while (x) {
    int U = x - p[x];
    for (auto i : re[U]) {
      l[id[mp[S - sum[id[i]] + kp[i]]]] = S - sum[id[i]] + kp[i],
                               r[id[mp[S - sum[id[i]] + kp[i]]]] = id[i];
    }
    x = p[x];
  }
  puts("Yes");
  for (int i = 1; i <= k; i++) printf("%d %d\n", l[i], r[i]);
  return 0;
}
