#include <bits/stdc++.h>
using namespace std;
map<int, int> f;
vector<pair<int, int> > g[80000];
int a[15][5010], k, n[15];
long long tot[5010];
int q[80000], d[80000], to[80000], vis[80000];
int cnt, val[80000], h[1 << 15], pre[1 << 15], dp[1 << 15];
void add(int u, int v) {
  to[u] = v;
  d[v]++;
}
void getcircle(int x) {
  cnt++;
  bool flag = 1;
  while (!vis[x]) {
    vis[x] = 1;
    g[cnt].push_back(make_pair(to[x], x % k));
    if ((val[cnt] >> (x % k)) & 1) flag = 0;
    val[cnt] |= 1 << (x % k);
    x = to[x];
  }
  h[val[cnt]] = flag ? cnt : 0;
}
pair<int, int> ans[15];
void solve() {
  dp[0] = 1;
  for (int i = 0; i < (1 << k); i++)
    for (int j = i; j; j = (j - 1) & i)
      if (dp[i ^ j] && h[j]) dp[i] = 1, pre[i] = j;
  if (!dp[(1 << k) - 1])
    puts("No");
  else {
    int now = (1 << k) - 1;
    while (now) {
      for (auto u : g[h[pre[now]]])
        ans[u.first % k] = make_pair(a[u.first % k][u.first / k], u.second);
      now ^= pre[now];
    }
    puts("Yes");
    for (int i = 0; i < k; i++)
      printf("%d %d\n", ans[i].first, ans[i].second + 1);
  }
}
int main() {
  scanf("%d", &k);
  long long s = 0;
  for (int i = 0; i < k; i++) {
    scanf("%d", &n[i]);
    for (int j = 0; j < n[i]; j++)
      scanf("%d", &a[i][j]), tot[i] += a[i][j], s += a[i][j],
          f[a[i][j]] = j * k + i + 1;
  }
  if (s % k) {
    puts("No");
  } else {
    long long avg = s / k;
    for (int i = 0; i < k; i++)
      for (int j = 0; j < n[i]; j++) {
        long long y = avg - tot[i] + a[i][j];
        if (abs(y) > 1e9) continue;
        if (f[(int)y]) add(j * k + i, f[y] - 1);
      }
    int h = 0, t = 0;
    for (int i = 0; i < k; i++)
      for (int j = 0; j < n[i]; j++)
        if (!d[j * k + i]) q[t++] = j * k + i;
    while (h < t) {
      int u = q[h++];
      vis[u] = 1;
      d[to[u]]--;
      if (!d[to[u]]) q[t++] = to[u];
    }
    for (int i = 0; i < k; i++)
      for (int j = 0; j < n[i]; j++)
        if (!vis[j * k + i]) getcircle(j * k + i);
    solve();
  }
  return 0;
}
