#include <bits/stdc++.h>
using namespace std;
using lli = long long int;
using vb = vector<bool>;
using vc = vector<char>;
using vd = vector<double>;
using vi = vector<int>;
using vvi = vector<vi>;
using vlli = vector<lli>;
using vvlli = vector<vlli>;
using pi = pair<int, int>;
using plli = pair<lli, lli>;
void readc(char &q) { scanf("%c", &q); }
char readc() {
  char q;
  scanf("%c", &q);
  return q;
}
void readint(int &q) { scanf("%d", &q); }
int readint() {
  int q;
  scanf("%d", &q);
  return q;
}
void readlong(lli &q) { scanf("%lld", &q); }
lli readlong() {
  lli q;
  scanf("%lld", &q);
  return q;
}
void readdbl(double &q) { scanf("%lf", &q); }
double readdbl() {
  double q;
  scanf("%lf", &q);
  return q;
}
void printint(int q) { printf("%d", q); }
void printlong(lli q) { printf("%lld", q); }
void printdbl(double q, int p = 6) { printf("%.*lf", p, q); }
void readln() { scanf("\n"); }
void println() { printf("\n"); }
void printsp() { printf(" "); }
void print(int q) { printint(q); }
void print(long q) { printlong((lli)q); }
void print(lli q) { printlong(q); }
void print(double q) { printdbl(q); }
void print(char c) { printf("%c", c); }
void print(pi q) {
  print(q.first);
  printsp();
  print(q.second);
}
void print(vi q) {
  for (int i = 0; i < q.size(); ++i) {
    print(q[i]);
    printsp();
  }
}
void print(vlli q) {
  for (int i = 0; i < q.size(); ++i) {
    print(q[i]);
    printsp();
  }
}
void print(vd q) {
  for (int i = 0; i < q.size(); ++i) {
    print(q[i]);
    printsp();
  }
}
template <typename T>
void println(T q) {
  print(q);
  println();
}
template <typename T>
T maxim(T first, T second) {
  return (first > second) ? first : second;
}
template <typename T>
T maxim(T first, T second, T third) {
  return mndlim(maxim(first, second), third);
}
template <typename T>
T minim(T first, T second) {
  return (first < second) ? first : second;
}
template <typename T>
T minim(T first, T second, T third) {
  return minim(minim(first, second), third);
}
template <typename T>
T middle(T first, T second, T third) {
  return first + second + third - maxim(first, second, third) -
         minim(first, second, third);
}
template <typename T>
T abs(T arg) {
  return arg < 0 ? -arg : arg;
}
const lli modulo = 1000000007;
int main() {
  int t = readint();
  for (lli l = 0; l < t; ++l) {
    int n = readint();
    map<pi, vi> m;
    for (int i = 0; i < n - 2; ++i) {
      int a = readint() - 1;
      int b = readint() - 1;
      int c = readint() - 1;
      m[make_pair(minim(a, b), maxim(a, b))].push_back(i);
      m[make_pair(minim(c, b), maxim(c, b))].push_back(i);
      m[make_pair(minim(a, c), maxim(a, c))].push_back(i);
    }
    vvi g1(n);
    vector<set<int>> g2(n - 2);
    for (auto q : m) {
      if (q.second.size() == 1) {
        g1[q.first.first].push_back(q.first.second);
        g1[q.first.second].push_back(q.first.first);
      } else {
        g2[q.second[0]].insert(q.second[1]);
        g2[q.second[1]].insert(q.second[0]);
      }
    }
    int prev = -1;
    int cur = 0;
    for (int i = 0; i < n; ++i) {
      cout << cur + 1 << " ";
      if (g1[cur][0] != prev) {
        prev = cur;
        cur = g1[cur][0];
      } else {
        prev = cur;
        cur = g1[cur][1];
      }
    }
    println();
    set<pi> s;
    for (int i = 0; i < n - 2; ++i) {
      s.insert(make_pair(g2[i].size(), i));
    }
    for (int i = 0; i < n - 2; ++i) {
      auto it = s.begin();
      int cur = it->second;
      cout << cur + 1 << " ";
      int next = *(g2[cur].begin());
      s.erase(s.begin());
      s.erase(make_pair(g2[next].size(), next));
      g2[next].erase(cur);
      s.insert(make_pair(g2[next].size(), next));
    }
    println();
  }
  return 0;
}
