#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll inf = 1e18;
const int N = 2 * 1e5 + 10;
ll sum;
ll res;
ll a[N];
ll group[N];
map<ll, ll> vis, here;
vector<ll> v[N], vv;
vector<vector<ll> > dp[N];
vector<pair<ll, pair<ll, ll> > > ans;
int solve() {
  ll n, m, x;
  cin >> n;
  for (int i = 0; i < n; ++i) {
    cin >> m;
    for (int j = 0; j < m; ++j) {
      cin >> x;
      v[i].push_back(x);
      here[x] = i;
      sum += x;
      group[i] += x;
    }
  }
  if (sum % n) return cout << "No\n", 0;
  sum /= n;
  for (int i = 0; i < n; ++i) {
    for (auto j : v[i]) {
      vector<ll> cycle;
      cycle.push_back(j);
      ll cur = j, box = i, mask = 0;
      while ((mask & (1LL << box)) == 0) {
        mask |= (1LL << box);
        cur = sum - group[box] + cur;
        if (!here.count(cur)) break;
        cycle.push_back(cur);
        box = here[cur];
      }
      if (dp[mask].empty() and cur == j) {
        dp[mask].push_back(cycle);
        vv.push_back(mask);
      }
    }
  }
  for (int i = 0; i < (1LL << n); ++i) {
    if (dp[i].empty()) {
      for (int j = i; j > 0; j = (j - 1) & i) {
        if (!dp[j].empty() and !dp[i ^ j].empty()) {
          for (auto k : dp[j]) dp[i].push_back(k);
          for (auto k : dp[i ^ j]) dp[i].push_back(k);
          break;
        }
      }
    }
  }
  if (dp[(1LL << n) - 1].empty())
    cout << "No\n";
  else {
    cout << "Yes\n";
    for (auto cycle : dp[(1LL << n) - 1]) {
      for (int i = 1; i < cycle.size(); ++i) {
        ans.push_back({here[cycle[i]], {cycle[i], here[cycle[i - 1]] + 1}});
      }
    }
    sort(ans.begin(), ans.end());
    for (auto i : ans) cout << i.second.first << " " << i.second.second << "\n";
  }
  return 0;
}
int main(int argc, char const *argv[]) {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
  ll t = 1;
  while (t--) {
    solve();
  }
}
