#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1005;
const int INF = 1e9;
bitset<MAXN> G[MAXN], S[MAXN], nl;
int n, fa[MAXN];
int get_fa(int x) {
  if (fa[x] == x) return x;
  return fa[x] = get_fa(fa[x]);
}
int main() {
  scanf("%d", &n);
  for (register int i = 1; i <= n; ++i) {
    int k;
    scanf("%d", &k);
    while (k--) {
      int x;
      scanf("%d", &x);
      G[i][x] = 1;
    }
  }
  for (register int i = 1; i <= n; ++i) fa[i] = i;
  bitset<MAXN> t;
  int u, v, cnt = 0;
  for (register int i = 1; i <= n; ++i) {
    for (register int j = 1; j <= n; ++j) {
      t = (G[i] & G[j]);
      if (t.count() == 2) {
        u = 0;
        v = 0;
        for (register int k = 1; k <= n; ++k)
          if (t[k]) (!u) ? (u = k) : (v = k);
        int fu = get_fa(u), fv = get_fa(v);
        if (fu != fv) {
          fa[fu] = fv;
          printf("%d %d\n", u, v);
          cnt++;
          S[u][u] = S[v][v] = S[u][v] = S[v][u] = 1;
          nl[u] = nl[v] = 1;
        }
      }
    }
  }
  if (cnt == 0) {
    for (register int i = 2; i <= n; ++i) printf("1 %d\n", i);
    return 0;
  } else if (cnt == 1) {
    for (register int i = 1; i <= n; ++i) {
      if (G[i].count() < n) {
        for (register int j = 1; j <= n; ++j) {
          if (!nl[j]) printf("%d %d\n", (G[i][j] ? u : v), j);
        }
        break;
      }
    }
    return 0;
  }
  for (register int i = 1; i <= n; ++i) {
    if (!nl[i]) {
      int mn = INF;
      for (register int j = 1; j <= n; ++j) {
        if (G[j][i] && (G[j] & nl).count() < mn) {
          t = (G[j] & nl);
          mn = t.count();
        }
      }
      for (register int j = 1; j <= n; ++j) {
        if (t[j] && S[j] == t) {
          printf("%d %d\n", i, j);
          break;
        }
      }
    }
  }
  return 0;
}
