#include <bits/stdc++.h>
using namespace std;
int N, M, V[1005];
bitset<1005> T, A[1005], E[1005], G[1005];
int IN() {
  int x = 0, ch;
  for (; (ch = getchar()) < '0' || ch > '9';)
    ;
  for (; ch >= '0' && ch <= '9'; (ch = getchar())) (x *= 10) += ch - '0';
  return x;
}
int main() {
  N = IN();
  for (int i = 1; i <= N; i++) {
    int k = IN(), x;
    for (; k--;) x = IN(), A[i][x] = 1;
  }
  for (int i = 1; i <= N; i++)
    for (int j = i + 1; j <= N; j++) {
      bitset<1005> t = A[i] & A[j];
      if (t.count() == 2) {
        int u, v;
        for (u = 1; !t[u]; u++)
          ;
        for (v = u + 1; !t[v]; v++)
          ;
        if (!E[u][v]) E[u][v] = E[v][u] = 1, M++;
      }
    }
  if (!M) {
    for (int i = 2; i <= N; i++) printf("%d %d\n", 1, i);
    return 0;
  }
  for (int i = 1; i <= N; i++)
    if (E[i].count())
      T[i] = 1, V[i] = (E[i].count() == 1), G[i] = E[i], G[i][i] = 1;
  if (T.count() == 2) {
    int u, v;
    for (u = 1; !T[u]; u++)
      ;
    for (v = N; !T[v]; v--)
      ;
    printf("%d %d\n", u, v);
    for (int i = 1; i <= N; i++)
      if (!T[i]) {
        bitset<1005> t;
        for (int j = 1; j <= N; j++)
          if (A[j][i] && A[j].count() != N) {
            t = A[j];
            break;
          }
        for (int j = 1; j <= N; j++)
          if (t[j] && !T[j]) T[j] = 1, printf("%d %d\n", j, u);
        u = v;
      }
    return 0;
  }
  for (int i = 1; i <= N; i++)
    if (!T[i]) {
      bitset<1005> t = T;
      for (int j = 1; j <= N; j++)
        if (A[j][i]) t &= A[j];
      if (t.count() == 2) {
        for (int j = 1; j <= N; j++)
          if (t[j] && V[j]) E[i][j] = E[j][i] = 1;
      } else {
        for (int j = 1; j <= N; j++)
          if (t[j] && ((G[j] & t) == t)) E[i][j] = E[j][i] = 1;
      }
    }
  for (int i = 1; i <= N; i++)
    for (int j = i + 1; j <= N; j++)
      if (E[i][j]) printf("%d %d\n", i, j);
}
