#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 + 5;
const long long MOD = 1e9 + 7;
const long long INF = INT64_MAX;
mt19937 rnd(time(0));
bool check(vector<int> &p, vector<set<int>> &t) {
  set<set<int>> a;
  for (auto y : t) {
    a.insert(y);
  }
  int n = p.size();
  for (int i = 1; i < n; i++) {
    set<int> now;
    now.insert(p[i]);
    bool f = 0;
    for (int j = i - 1; j >= 0; j--) {
      now.insert(p[j]);
      if (a.find(now) != a.end()) {
        f = 1;
        break;
      }
    }
    if (!f) {
      return 0;
    }
  }
  return 1;
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int q;
  cin >> q;
  while (q--) {
    int n;
    cin >> n;
    vector<set<int>> a(n - 1);
    for (int i = 0; i < n - 1; ++i) {
      int k;
      cin >> k;
      for (int j = 0; j < k; ++j) {
        int b;
        cin >> b;
        b--;
        a[i].insert(b);
      }
    }
    vector<int> ans;
    for (int elem = 0; elem < n; ++elem) {
      vector<int> now;
      vector<set<int>> t(n - 1);
      for (int i = 0; i < n - 1; ++i) {
        for (auto x : a[i]) {
          t[i].insert(x);
        }
      }
      now.push_back(elem);
      int lst = elem;
      bool ok = 1;
      while (now.size() < n && ok) {
        for (int i = 0; i < n - 1; ++i) {
          t[i].erase(lst);
        }
        int ind = -1;
        for (int i = 0; i < n - 1; ++i) {
          if (t[i].size() == 1) {
            if (ind != -1) {
              ok = 0;
              ind = -1;
              break;
            }
            ind = *(t[i].begin());
          }
        }
        if (ind == -1) {
          ok = 0;
          break;
        }
        lst = ind;
        now.push_back(ind);
      }
      if (!ok) {
        continue;
      }
      if (!check(now, a)) {
        continue;
      }
      ans = now;
      break;
    }
    for (int x : ans) {
      cout << x + 1 << " ";
    }
    cout << "\n";
  }
  return 0;
}
