#include <bits/stdc++.h>
using namespace std;
const long long inf = (long long)1e18;
const long long mod = (long long)1e9 + 7;
const double eps = (double)1e-9;
const double pi = acos(-1.0);
const int dx[] = {0, 0, 1, 0, -1};
const int dy[] = {0, 1, 0, -1, 0};
const int N = 16;
const int M = 5005;
map<int, int> pos;
int n, cnt[N], p[1 << N];
pair<int, int> start[1 << N], ans[N];
bool u[N], ok[1 << N], dp[1 << N];
long long sum, need, a[N][M], val[N], nval[N];
vector<pair<pair<int, int>, int> > steps[1 << N];
int main() {
  cin.tie(NULL);
  cout.tie(NULL);
  ios_base::sync_with_stdio(false);
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> cnt[i];
    for (int j = 1; j <= cnt[i]; j++) {
      cin >> a[i][j];
      pos[a[i][j]] = i;
      sum += a[i][j];
      val[i] += a[i][j];
    }
  }
  if (sum % n != 0) {
    cout << "No";
    return 0;
  }
  need = sum / n;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= cnt[i]; j++) {
      memset(u, 0, sizeof(u));
      for (int k = 1; k <= n; k++) nval[k] = val[k];
      nval[i] -= a[i][j];
      bool bad = 0;
      int v = i, mask = (1 << (i - 1));
      vector<pair<pair<int, int>, int> > cur_steps;
      while (1) {
        u[v] = 1;
        long long now = need - nval[v];
        if (!pos.count(now)) {
          bad = 1;
          break;
        }
        int to = pos[now];
        if (u[to]) {
          if (to != i || now != a[i][j])
            bad = 1;
          else
            cur_steps.push_back({{a[i][j], v}, to});
          break;
        }
        cur_steps.push_back({{now, v}, to});
        mask |= (1 << (to - 1));
        nval[to] -= now;
        v = to;
      }
      if (bad) continue;
      ok[mask] = 1;
      start[mask] = {i, j};
      steps[mask] = cur_steps;
    }
  }
  dp[0] = 1;
  for (int mask = 1; mask < (1 << n); mask++) {
    for (int smask = mask; smask > 0; smask = ((smask - 1) & mask)) {
      if (ok[smask] && dp[mask ^ smask]) {
        dp[mask] = 1;
        p[mask] = smask;
      }
    }
  }
  if (!dp[(1 << n) - 1]) {
    cout << "No";
    return 0;
  }
  cout << "Yes" << endl;
  int mask = (1 << n) - 1;
  while (mask) {
    for (auto i : steps[p[mask]]) ans[i.second] = i.first;
    mask ^= p[mask];
  }
  for (int i = 1; i <= n; i++)
    cout << ans[i].first << " " << ans[i].second << endl;
  return 0;
}
