#include <bits/stdc++.h>
using namespace std;
int k;
long long s[16], sum;
map<long long, int> id;
vector<long long> v;
bool vis[16];
bool dp[1 << 15];
vector<pair<int, int> > way[1 << 15];
int pre[1 << 15];
pair<int, int> ans[16];
int main() {
  scanf("%d", &k);
  for (int i = 0; i < k; i++) {
    int n;
    scanf("%d", &n);
    while (n--) {
      int x;
      scanf("%d", &x);
      s[i] += x, sum += x;
      id[x] = i;
      v.push_back(x);
    }
  }
  if (sum % k)
    printf("No\n");
  else {
    sum /= k;
    for (auto x : v) {
      for (int i = 0; i < k; i++) vis[i] = false;
      long long now = x;
      int mask = 0;
      vector<pair<int, int> > opt;
      bool f = true;
      while (!vis[id[now]]) {
        vis[id[now]] = true;
        long long pre = now;
        now = sum - s[id[now]] + now;
        if (id.count(now) == 0) {
          f = false;
          break;
        }
        if (vis[id[now]] && now != x) {
          f = false;
          break;
        }
        mask |= 1 << id[pre];
        opt.push_back(pair<int, int>(now, pre));
      }
      if (f == true) way[mask] = opt;
    }
    dp[0] = 1;
    for (int i = 1; i < (1 << k); i++) {
      for (int j = i - 1; j != i; j = (j - 1) & i) {
        if (dp[j] && !way[i ^ j].empty()) {
          dp[i] = 1;
          pre[i] = j;
          break;
        }
      }
    }
    if (!dp[(1 << k) - 1])
      printf("No\n");
    else {
      printf("Yes\n");
      int now = (1 << k) - 1;
      while (now) {
        int x = now ^ (pre[now]);
        for (auto p : way[x])
          ans[id[p.first]] = pair<int, int>(p.first, id[p.second]);
        now = pre[now];
      }
      for (int i = 0; i < k; i++)
        printf("%d %d\n", ans[i].first, ans[i].second + 1);
    }
  }
  return 0;
}
