#include <bits/stdc++.h>
#pragma optimize("Ofast")
using namespace std;
const long long INF = 5e18;
const long long mod = 998244353;
vector<long long> v[202];
vector<pair<long long, long long> > w;
long long a[202], n, mark[202], mm[202];
bool solv(long long id, long long xx, long long yy) {
  memset(mark, 0, sizeof mark);
  memset(mm, 0, sizeof mm);
  mark[id] = 1;
  a[0] = xx;
  a[1] = yy;
  mm[a[0]] = 1;
  mm[a[1]] = 2;
  for (long long i = 2; i < n; i++) {
    long long ii = 0;
    for (long long j = 1; j < n; j++) {
      if (!mark[j]) {
        long long sw = 0;
        long long mn = n + n;
        for (auto k : v[j])
          if (mm[k])
            mn = min(mn, mm[k]);
          else
            sw++;
        if (sw > 1) continue;
        if (sw == 0) return 0;
        if (mn == n + n) continue;
        if (i - mn + 2 == v[j].size()) {
          if (ii) return 0;
          ii = j;
        }
      }
    }
    if (!ii) return 0;
    for (auto k : v[ii])
      if (!mm[k]) {
        mm[k] = i + 1;
        a[i] = k;
        break;
      }
    mark[ii] = 1;
  }
  return 1;
}
void slv() {
  for (long long i = 0; i < 202; i++) v[i].clear();
  w.clear();
  memset(a, 0, sizeof a);
  cin >> n;
  for (long long i = 1; i < n; i++) {
    long long k;
    cin >> k;
    w.push_back({k, i});
    while (k--) {
      long long x;
      cin >> x;
      v[i].push_back(x);
    }
  }
  sort(w.begin(), w.end());
  for (long long i = 0; i < w.size(); i++) {
    if (solv(w[i].second, v[w[i].second][0], v[w[i].second][1])) {
      ;
      {
        for (long long i = 0; i < n; i++) cout << a[i] << ' ';
        cout << '\n';
      };
      return;
    }
    if (solv(w[i].second, v[w[i].second][1], v[w[i].second][0])) {
      ;
      {
        for (long long i = 0; i < n; i++) cout << a[i] << ' ';
        cout << '\n';
      };
      return;
    }
  }
}
signed main() {
  {
    ios::sync_with_stdio(false);
    cin.tie();
    cout.tie();
  };
  long long t;
  cin >> t;
  while (t--) slv();
}
