#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
long long power(long long a, long long b, long long m = mod) {
  long long x = 1;
  while (b) {
    if (b & 1) {
      x = 1ll * x * a % m;
    }
    a = 1ll * a * a % m;
    b /= 2;
  }
  return x;
}
const int N = 5e5 + 9;
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int tt;
  cin >> tt;
  while (tt--) {
    int n;
    cin >> n;
    vector<vector<int>> g(n + 1);
    map<pair<int, int>, vector<int>> gg;
    vector<vector<int>> a(n + 1, vector<int>(3));
    map<pair<int, int>, int> ed1;
    for (int i = 1; i <= n - 2; i++) {
      for (int j = 0; j < 3; j++) {
        cin >> a[i][j];
      }
      for (int j = 0; j < 3; j++) {
        int u = a[i][j];
        int v = a[i][(j + 1) % 3];
        if (u > v) swap(u, v);
        g[u].push_back(v);
        g[v].push_back(u);
        gg[{u, v}].push_back(i);
        ed1[{u, v}]++;
      }
    }
    vector<vector<int>> gp(n + 1);
    for (auto it : ed1) {
      if (it.second == 1) {
        int u = it.first.first, v = it.first.second;
        gp[u].push_back(v);
        gp[v].push_back(u);
      }
    }
    vector<int> poly;
    vector<int> vis(n + 1);
    map<pair<int, int>, int> ed;
    vis[1] = 1;
    poly.push_back(1);
    for (int i = 1;;) {
      int pi = i;
      for (int v : gp[i]) {
        if (vis[v] == 0) {
          vis[v] = 1;
          i = v;
          ed[{min(pi, i), max(pi, i)}]++;
          break;
        }
      }
      if (i == pi) {
        ed[{1, pi}]++;
        break;
      }
      poly.push_back(i);
    }
    vector<int> cnt(n + 2);
    for (int i : poly) cout << i << " ";
    cout << "\n";
    if (n == 3) {
      cout << "1\n";
      continue;
    }
    function<pair<int, int>(int)> get_corner = [&](int i) {
      int cc = 0, tu;
      for (int j = 0; j < 3; j++) cnt[a[i][j]] = 0;
      for (int j = 0; j < 3; j++) {
        int u = a[i][j];
        int v = a[i][(j + 1) % 3];
        if (u > v) swap(u, v);
        if (ed.count({u, v})) {
          cc++;
          cnt[u]++;
          cnt[v]++;
          if (cnt[u] > cnt[v])
            tu = u;
          else
            tu = v;
        }
      }
      return make_pair(tu, cc);
    };
    int cur = 1;
    set<pair<int, int>> ss;
    for (int i = 1; i <= n - 2; i++) {
      auto r = get_corner(i);
      if (r.second == 2) {
        cur = i;
        ss.insert({-r.second, i});
      }
    }
    while ((int)ss.size() > 1) {
      auto it = *ss.begin();
      ss.erase(ss.begin());
      cur = it.second;
      auto r = get_corner(cur);
      cout << cur << " ";
      int x = -1, y = -1;
      for (int j = 0; j < 3; j++) {
        int v = a[cur][j];
        if (v != r.first) {
          if (x == -1)
            x = v;
          else
            y = v;
        }
      }
      if (x > y) swap(x, y);
      int ind = 0;
      auto tmp = gg[{x, y}];
      if (tmp.empty()) {
        return 0;
      }
      if (tmp[ind] == cur) ind++;
      ed[{x, y}]++;
      cur = tmp[ind];
      r = get_corner(cur);
      ss.erase({-r.second + 1, cur});
      ss.insert({-r.second, cur});
    }
    cout << ss.begin()->second << "\n";
  }
  return 0;
}
