#include <bits/stdc++.h>
using namespace std;
int n, f[1007], cnt;
bitset<1007> in[1007], one[1007], c, is;
int read() {
  int num = 0;
  char c = getchar();
  while (c < '0' || c > '9') c = getchar();
  while (c >= '0' && c <= '9') num = num * 10 + c - '0', c = getchar();
  return num;
}
int find(int x) {
  if (f[x] == x) return x;
  return f[x] = find(f[x]);
}
int main() {
  n = read();
  for (int i = 1; i <= n; i++) {
    int k = read();
    f[i] = i;
    for (int j = 1; j <= k; j++) in[i][read()] = 1;
  }
  for (int i = 1; i <= n; i++)
    for (int j = i + 1; j <= n; j++) {
      c = (in[i] & in[j]);
      if (c.count() == 2) {
        int a = 0, b = 0;
        for (int k = 1; k <= n; k++)
          if (c[k])
            if (a)
              b = k;
            else
              a = k;
        if (find(a) != find(b)) {
          cout << a << ' ' << b << endl;
          f[find(a)] = find(b);
          cnt++;
          one[a][b] = one[b][a] = one[a][a] = one[b][b] = is[a] = is[b] = 1;
        }
      }
    }
  if (cnt == 0) {
    for (int i = 2; i <= n; i++) cout << 1 << ' ' << i << endl;
    return 0;
  } else if (cnt == 1) {
    int a = 0, b = 0;
    for (int k = 1; k <= n; k++)
      if (is[k])
        if (a)
          b = k;
        else
          a = k;
    for (int i = 1; i <= n; i++)
      if (in[i].count() < n) {
        for (int j = 1; j <= n; j++)
          if (!is[j]) cout << (in[i][j] ? a : b) << ' ' << j << endl;
        break;
      }
    return 0;
  }
  for (int i = 1; i <= n; i++)
    if (!is[i]) {
      int mn = 1000;
      for (int j = 1; j <= n; j++)
        if (in[j][i] && (in[j] & is).count() < mn) {
          c = in[j] & is;
          mn = c.count();
        }
      for (int j = 1; j <= n; j++)
        if (c[j] && one[j] == c) {
          cout << i << ' ' << j << endl;
          break;
        }
    }
  return 0;
}
