#include <bits/stdc++.h>
using namespace std;
const int N = 210;
const int INF = 0x3f3f3f3f;
vector<int> p[N], q[N], g;
int a[N], c[N], vis[N], n, m, t, tp1[N], tp2[N];
bool check(int a, int b) {
  for (int i = 1; i < n; ++i) {
    int l = 0, r = 0;
    for (auto o : p[i]) {
      if (o == a) l = 1;
      if (o == b) r = 1;
    }
    if (l > r) return false;
  }
  return true;
}
int f[N], v[N], pt[N];
bool ok() {
  for (int i = 1; i <= n; ++i) f[a[i]] = i;
  for (int i = 1; i <= n; ++i) v[i] = 0;
  for (int i = 1; i < n; ++i) {
    g.clear();
    for (auto x : p[i]) g.push_back(f[x]);
    sort(g.begin(), g.end());
    if (g[g.size() - 1] - g[0] + 1 != g.size()) return false;
    v[g[g.size() - 1]] = 1;
  }
  for (int i = 2; i <= n; ++i)
    if (!v[i]) return false;
  return true;
}
bool solve(int mm) {
  int m = 0;
  while (m < mm - 2) {
    int o = -1, k = -1;
    for (int i = 1; i <= n; ++i) {
      if (c[i] == 1) {
        o = i;
        break;
      }
    }
    if (o == -1) return false;
    a[mm - m] = o;
    for (auto x : q[o]) {
      if (!vis[x]) {
        k = x;
        break;
      }
    }
    if (k == -1) return false;
    for (auto x : p[k]) c[x]--;
    vis[k] = 1;
    m++;
  }
  for (int i = 3; i <= n; ++i) c[a[i]] = -INF;
  int x = 0, y = 0;
  for (int i = 1; i <= n; ++i) {
    if (c[i] != -INF) {
      if (!x)
        x = i;
      else
        y = i;
    }
  }
  if (check(x, y)) {
    a[1] = x;
    a[2] = y;
  } else if (check(y, x)) {
    a[1] = y;
    a[2] = x;
  } else
    return false;
  return ok();
}
int main() {
  scanf("%d", &t);
  while (t--) {
    scanf("%d", &n);
    int o, k;
    for (int i = 1; i <= n; ++i) {
      p[i].clear();
      q[i].clear();
      vis[i] = 0;
      c[i] = 0;
    }
    for (int i = 1; i < n; ++i) {
      scanf("%d", &m);
      while (m--) {
        scanf("%d", &o);
        p[i].push_back(o);
        q[o].push_back(i);
        c[o]++;
      }
    }
    int x = 0, y = 0, m = 0;
    while (m < n - 2) {
      x = y = 0;
      for (int i = 1; i <= n; ++i) {
        if (c[i] == 1) {
          if (!x)
            x = i;
          else
            y = i;
        }
      }
      if (y) {
        for (int i = 1; i <= n; ++i) tp1[i] = c[i], tp2[i] = vis[i];
        c[y]--;
        if (!solve(n - m)) {
          for (int i = 1; i <= n; ++i) c[i] = tp1[i], vis[i] = tp2[i];
          c[x]--;
          solve(n - m);
        }
        break;
      }
      o = x;
      a[n - m] = o;
      for (auto x : q[o]) {
        if (!vis[x]) {
          k = x;
          break;
        }
      }
      for (auto x : p[k]) c[x]--;
      vis[k] = 1;
      m++;
    }
    if (m == n - 2) {
      for (int i = 3; i <= n; ++i) c[a[i]] = -INF;
      int x = 0, y = 0;
      for (int i = 1; i <= n; ++i) {
        if (c[i] != -INF) {
          if (!x)
            x = i;
          else
            y = i;
        }
      }
      if (check(x, y)) {
        a[1] = x;
        a[2] = y;
      } else {
        a[1] = y;
        a[2] = x;
      }
    }
    for (int i = 1; i <= n; ++i) printf("%d ", a[i]);
    printf("\n");
  }
}
