#include <bits/stdc++.h>
using namespace std;
int main() {
  int i, n, j;
  cin >> n;
  int arr[n + 1], visited[n + 1];
  for (i = 0; i < n + 1; i++) {
    arr[i + 1] = 0;
    visited[i + 1] = false;
  }
  vector<int> ans(n + 1);
  map<pair<int, int>, set<int>> m;
  for (i = 0; i < n - 2; i++) {
    vector<int> v(3);
    for (j = 0; j < 3; j++) {
      cin >> v[j];
      arr[v[j]]++;
    }
    sort(v.begin(), v.end());
    m[{v[0], v[1]}].insert(v[2]);
    m[{v[1], v[2]}].insert(v[0]);
    m[{v[0], v[2]}].insert(v[1]);
  }
  for (i = 1; i <= n; i++) {
    if (arr[i] == 1) {
      break;
    }
  }
  ans[0] = i;
  visited[i] = true;
  vector<int> vv;
  for (i = 1; i <= n; i++) {
    if (arr[i] == 2) {
      vv.push_back(i);
    }
  }
  int a, b;
  a = ans[0], b = vv[0];
  if (a > b) {
    swap(a, b);
  }
  if (m.find({a, b}) == m.end()) {
    a = ans[0];
    b = vv[1];
    if (a > b) swap(a, b);
  }
  if (m.find({a, b}) != m.end()) {
    if (!visited[b]) {
      ans[1] = b;
      visited[b] = true;
    } else {
      ans[1] = a;
      visited[a] = true;
    }
    for (i = 0; i < n - 2; i++) {
      for (auto it = m[{a, b}].begin(); it != m[{a, b}].end(); it++) {
        if (!visited[*it]) {
          visited[*it] = true;
          ans[i + 2] = *it;
          a = ans[i + 1];
          b = ans[i + 2];
          if (a > b) swap(a, b);
          break;
        }
      }
    }
  }
  for (i = 0; i < n; i++) {
    cout << ans[i] << " ";
  }
}
