#include <bits/stdc++.h>
void err() { std::cout << '\n'; }
template <typename T, typename... Args>
void err(T a, Args... args) {
  std::cout << a << ' ';
  err(args...);
}
template <template <typename...> class T, typename t, typename... A>
void err(const T<t> &arg, const A &...args) {
  for (auto &v : arg) std::cout << v << ' ';
  err(args...);
}
using namespace std;
const int N = 5005, M = 16;
int k;
int n[M], a[M][N];
map<long long, pair<int, int>> mp;
long long S[M];
long long t;
bool f[1 << M], g[1 << M];
int pre[1 << M];
pair<int, int> to[M], where[M][N];
vector<pair<int, int>> way[1 << M];
void run() {
  scanf("%d", &k);
  long long sum = 0;
  for (int i = 1; i <= k; i++) {
    scanf("%d", &n[i]);
    for (int j = 1; j <= n[i]; j++) {
      scanf("%d", &a[i][j]);
      sum += a[i][j];
      mp[a[i][j]] = make_pair(i, j);
      S[i] += a[i][j];
    }
  }
  if (sum % k != 0) {
    cout << "NO" << '\n';
    return;
  }
  t = sum / k;
  for (int i = 1; i <= k; i++) {
    for (int j = 1; j <= n[i]; j++) {
      long long need = t - (S[i] - a[i][j]);
      where[i][j] = mp.count(need) ? mp[need] : make_pair(-1, -1);
    }
  }
  for (int i = 1; i <= k; i++) {
    for (int j = 1; j <= n[i]; j++) {
      pair<int, int> now = make_pair(i, j);
      vector<pair<int, int>> cyc;
      int s = 0, flag = 1;
      while (1) {
        s ^= (1 << (now.first - 1));
        cyc.push_back(now);
        pair<int, int> to = where[now.first][now.second];
        if (to == make_pair(-1, -1)) {
          flag = 0;
          break;
        }
        now = to;
        if (s & (1 << (now.first - 1))) {
          if (now != make_pair(i, j)) flag = 0;
          break;
        }
      }
      if (flag == 0) continue;
      way[s] = cyc;
      f[s] = 1;
    }
  }
  g[0] = true;
  for (int sta = 0; sta < 1 << k; sta++) {
    for (int s = sta; s; s = (s - 1) & sta) {
      if (g[sta ^ s] & f[s]) {
        g[sta] = true;
        pre[sta] = s;
        break;
      }
    }
  }
  if (g[(1 << k) - 1] == false)
    cout << "NO" << '\n';
  else {
    cout << "YES" << '\n';
    int now = (1 << k) - 1;
    while (now) {
      int p = pre[now];
      for (auto it : way[p]) {
        pair<int, int> go = where[it.first][it.second];
        to[go.first] = make_pair(a[go.first][go.second], it.first);
      }
      now -= p;
    }
    for (int i = 1; i <= k; i++) {
      cout << to[i].first << ' ' << to[i].second << '\n';
    }
  }
}
int main() {
  run();
  return 0;
}
