#include <bits/stdc++.h>
using namespace std;
vector<int> solve(vector<set<int>> vec, int n, int first) {
  set<set<int>> s(vec.begin(), vec.end());
  vector<int> ans = {first};
  queue<int> q;
  auto erase = [&](int x) {
    for (int i = 0; i < n - 1; i++) {
      vec[i].erase(x);
      if ((int)vec[i].size() == 1) {
        q.push(i);
      }
    }
  };
  erase(first);
  while (!q.empty()) {
    int id = q.front();
    q.pop();
    if (!q.empty()) return vector<int>{};
    int val = *vec[id].begin();
    ans.push_back(val);
    erase(val);
  }
  if ((int)ans.size() != n) return vector<int>{};
  for (int i = 0; i < n and !s.empty(); i++) {
    set<int> cur;
    for (int j = i; j < n; j++) {
      cur.insert(ans[j]);
      s.erase(cur);
    }
  }
  if (!s.empty()) return vector<int>{};
  return ans;
}
int main() {
  int t;
  scanf("%d", &t);
  while (t--) {
    int n;
    scanf("%d", &n);
    vector<set<int>> vec(n - 1);
    for (int i = 0; i < n - 1; i++) {
      int k;
      scanf("%d", &k);
      while (k--) {
        int x;
        scanf("%d", &x);
        vec[i].insert(x);
      }
    }
    vector<int> ans;
    for (int first = 1; first <= n; first++) {
      ans = solve(vec, n, first);
      if (!ans.empty()) break;
    }
    for (int i = 0; i < n; i++) {
      printf("%d%c", ans[i], " \n"[i + 1 == n]);
    }
  }
}
