#include <bits/stdc++.h>
using namespace std;
vector<int> v[210];
int n, used[210], done[210], sz[210], m[210][210], ans[210], ina[210];
int valid(int q, int s) {
  int cnt = 0, val = -1;
  for (int i = 1; i <= n; i++) {
    if (ina[i] == -1 && m[q][i] == 1) cnt++, val = i;
    if (ina[i] != -1 && m[q][i] == 1 && ina[i] <= s - (int)v[q].size())
      return -1;
  }
  return cnt == 1 ? val : -1;
}
int yo(int p, int p0) {
  int a = p0, b = v[p][0] == p0 ? v[p][1] : v[p][0];
  ans[0] = a;
  ans[1] = b;
  ina[a] = 0;
  ina[b] = 1;
  used[p] = 1;
  for (int i = 2; i < n; i++) {
    int ok = 0;
    for (int j = 0; j < n - 1; j++) {
      if (used[j]) continue;
      int x = valid(j, i);
      if (x != -1) {
        ans[i] = x;
        ina[x] = i;
        used[j] = 1;
        ok = 1;
        break;
      }
    }
    if (ok == 0) return 0;
  }
  return 1;
}
void go() {
  cin >> n;
  for (int i = 0; i < n - 1; i++) v[i].clear();
  for (int i = 1; i <= n; i++) done[i] = 0;
  for (int i = 0; i < n - 1; i++)
    for (int j = 1; j <= n; j++) m[i][j] = 0;
  for (int i = 0; i < n - 1; i++) {
    cin >> sz[i];
    for (int j = 0; j < sz[i]; j++) {
      int x;
      cin >> x;
      v[i].push_back(x);
      m[i][x] = 1;
    }
  }
  for (int i = 0; i < n - 1; i++) {
    if (v[i].size() != 2) continue;
    if (!done[v[i][0]]) {
      for (int j = 0; j < n - 1; j++) used[j] = 0;
      for (int j = 1; j <= n; j++) ina[j] = -1;
      int w = yo(i, v[i][0]);
      done[v[i][0]] = 1;
      if (w) {
        for (int j = 0; j < n; j++) cout << ans[j] << " \n"[j == n - 1];
        return;
      }
    }
    if (!done[v[i][1]]) {
      for (int j = 0; j < n - 1; j++) used[j] = 0;
      for (int j = 1; j <= n; j++) ina[j] = -1;
      int w = yo(i, v[i][1]);
      done[v[i][1]] = 1;
      if (w) {
        for (int j = 0; j < n; j++) cout << ans[j] << " \n"[j == n - 1];
        return;
      }
    }
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  int t;
  cin >> t;
  while (t--) go();
}
