#include <bits/stdc++.h>
using namespace std;
int read();
int n;
bitset<1003> f[1003], g[1003], vis, dn, tmp, ttmp;
int main() {
  n = read();
  if (n == 1) return 0;
  if (n == 2) return puts("1 2"), 0;
  for (int i = 1; i <= n; ++i)
    for (int j = 1, k = read(); j <= k; ++j) f[i][read()] = 1;
  int flg = 0;
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= n; ++j) {
      tmp = f[i] & f[j];
      if (tmp.count() != 2) continue;
      int u[2], c = 0;
      for (int k = 1; k <= n; ++k)
        if (tmp[k]) u[c++] = k;
      if (!g[u[0]][u[1]]) {
        printf("%d %d\n", u[0], u[1]), ++flg;
        vis[u[0]] = vis[u[1]] = g[u[0]][u[1]] = g[u[1]][u[0]] = 1;
      }
    }
  }
  if (!flg) {
    for (int i = 2; i <= n; ++i) printf("1 %d\n", i);
    return 0;
  }
  if (flg == 1) {
    int u[2], c = 0;
    for (int i = 1; i <= n; ++i)
      if (vis[i]) u[c++] = i;
    for (int i = 1; i <= n; ++i) {
      if (f[i].count() < n) {
        for (int j = 1; j <= n; ++j)
          if (!vis[j]) printf("%d %d\n", j, u[f[i][j]]);
        break;
      }
    }
    return 0;
  }
  for (int i = 1; i <= n; ++i)
    if (vis[i]) g[i][i] = dn[i] = 1;
  for (int i = 1; i <= n; ++i) {
    if (dn[i]) continue;
    tmp.set();
    for (int j = 1; j <= n; ++j)
      if (f[j][i] && f[j].count() < tmp.count()) tmp = f[j];
    ;
    ttmp = tmp & (~vis), tmp = tmp & vis;
    for (int j = 1; j <= n; ++j)
      if (tmp == g[j])
        for (int k = 1; k <= n; ++k)
          if (ttmp[k]) dn[k] = 1, printf("%d %d\n", j, k);
  }
  return 0;
}
const int _SIZE = 1 << 22;
char ibuf[_SIZE], *iS = ibuf, *iT = ibuf;
int read() {
  int x = 0, f = 1;
  char c = (iS == iT ? iT = ((iS = ibuf) + fread(ibuf, 1, _SIZE, stdin)),
            (iS == iT ? EOF : *iS++) : *iS++);
  while (!isdigit(c))
    f = (c == '-') ? -1 : f,
    c = (iS == iT ? iT = ((iS = ibuf) + fread(ibuf, 1, _SIZE, stdin)),
         (iS == iT ? EOF : *iS++) : *iS++);
  while (isdigit(c))
    x = x * 10 + c - '0',
    c = (iS == iT ? iT = ((iS = ibuf) + fread(ibuf, 1, _SIZE, stdin)),
         (iS == iT ? EOF : *iS++) : *iS++);
  return x * f;
}
