#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#pragma comment(linker, "/STACK:2000000")
using namespace std;
template <int D, typename T>
struct Vec : public vector<Vec<D - 1, T>> {
  static_assert(D >= 1, "Vector dimension must be greater than zero!");
  template <typename... Args>
  Vec(int n = 0, Args... args)
      : vector<Vec<D - 1, T>>(n, Vec<D - 1, T>(args...)) {}
};
template <typename T>
struct Vec<1, T> : public vector<T> {
  Vec(int n = 0, T val = T()) : vector<T>(n, val) {}
};
using ll = long long;
using db = long double;
using ii = pair<int, int>;
const int N = 2e5 + 5, LG = 19, MOD = 998244353;
const int SQ = 320;
const long double EPS = 1e-7;
void printCase(int cs) { cout << "Case #" << cs << ": "; }
int n;
vector<vector<int>> SETS;
vector<int> test(vector<vector<int>> go, int lst, int banned = -1) {
  vector<int> ret;
  set<int> st;
  for (int i = 1; i < n + 1; i++) st.insert(i);
  vector<bool> vis(n - 1, false);
  vector<bitset<205>> bt(n + 1);
  for (int i = 1; i < n + 1; i++) bt[i].set();
  for (int i = n; i > 1; --i) {
    bool ok = false;
    for (int j = 1; j <= n && !ok; j++)
      if (j != banned && bt[i][j]) {
        vector<int> v;
        for (auto x : go[j])
          if (!vis[x]) v.push_back(x);
        if (v.size() == 1) {
          bitset<205> tmp;
          for (auto x : SETS[v[0]]) tmp.set(x);
          for (int k = i - 1; k > i - SETS[v[0]].size(); --k) bt[k] &= tmp;
          vis[v[0]] = true;
          ret.push_back(j);
          st.erase(j);
          ok = true;
        }
      }
    if (!ok) return vector<int>();
  }
  ret.push_back(*st.begin());
  reverse(ret.begin(), ret.end());
  assert(ret.back() == lst);
  if (~banned) assert(ret[0] == banned);
  return ret;
}
int32_t main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int t;
  cin >> t;
  while (t--) {
    cin >> n;
    SETS.resize(n - 1);
    vector<vector<int>> go(n + 1);
    for (int i = 0; i < n - 1; i++) {
      int k;
      cin >> k;
      SETS[i].resize(k);
      for (auto &x : SETS[i]) cin >> x, go[x].push_back(i);
    }
    vector<int> candidates, ans;
    for (int i = 1; i <= n; i++)
      if (go[i].size() == 1) candidates.push_back(i);
    assert(candidates.size() <= 2);
    if (candidates.size() == 1)
      ans = test(go, candidates[0]);
    else {
      ans = test(go, candidates[0], candidates[1]);
      if (ans.empty()) ans = test(go, candidates[1], candidates[0]);
    }
    assert(ans.size());
    for (int i = 0; i < n; i++) cout << ans[i] << ' ';
    cout << '\n';
  }
  return 0;
}
