#include <bits/stdc++.h>
using namespace std;
template <class T>
bool chmax(T& a, const T& b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
bool chmin(T& a, const T& b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}
const long long int MOD = 1e9 + 7, INF = 1e18;
long long int dx[8] = {0, -1, 1, 0, 1, -1, 1, -1},
              dy[8] = {1, 0, 0, -1, -1, -1, 1, 1};
struct edge {
  long long int cost;
  long long int u, v;
};
long long int T, N, A;
int main() {
  cin >> T;
  while (T--) {
    cin >> N;
    vector<long long int> sz(N - 1);
    vector<set<long long int>> subset(N - 1, set<long long int>());
    for (long long int i = (0), i_end_ = (N - 1); i < i_end_; i++) {
      cin >> sz[i];
      for (long long int j = (0), j_end_ = (sz[i]); j < j_end_; j++) {
        cin >> A;
        A--;
        subset[i].insert(A);
      }
    }
    vector<set<long long int>> _subset(N - 1, set<long long int>());
    for (long long int st = (0), st_end_ = (N); st < st_end_; st++) {
      vector<long long int> ans;
      _subset = subset;
      bool flag = true;
      long long int curr = st;
      ans.push_back(curr);
      for (long long int k = (0), k_end_ = (N - 1); k < k_end_; k++) {
        for (long long int i = (0), i_end_ = (N - 1); i < i_end_; i++) {
          _subset[i].erase(curr);
        }
        vector<long long int> one;
        for (long long int i = (0), i_end_ = (N - 1); i < i_end_; i++) {
          if (((long long int)(_subset[i]).size()) == 1)
            one.push_back(*_subset[i].begin());
        }
        if (((long long int)(one).size()) != 1) {
          flag = false;
          break;
        }
        curr = one.front();
        ans.push_back(curr);
      }
      if (flag) {
        bool used[200] = {false};
        for (long long int num = (0), num_end_ = (N - 1); num < num_end_;
             num++) {
          bool _flag = false;
          for (long long int i = (0), i_end_ = (N - 1); i < i_end_; i++) {
            if (used[i]) continue;
            if (num + 2 - sz[i] < 0) continue;
            bool __flag = true;
            for (long long int j = (0), j_end_ = (sz[i]); j < j_end_; j++) {
              if (subset[i].find(ans[num - j + 1]) == subset[i].end())
                __flag = false;
            }
            if (__flag) {
              _flag = true;
              used[i] = true;
              break;
            }
          }
          if (!_flag) {
            flag = false;
            break;
          }
        }
        if (flag) {
          for (long long int i = (0), i_end_ = (N); i < i_end_; i++) {
            cout << ans[i] + 1 << " ";
          }
          cout << '\n';
          break;
        }
      }
    }
  }
}
