#include <bits/stdc++.h>
using namespace std;
const int MAXN = 120010;
int N, A[MAXN][3], P[MAXN];
vector<int> vo[MAXN];
bool vis[MAXN];
set<int> st;
bool ok(int op) {
  if (vis[op]) {
    return false;
  }
  for (int i = 1; i < 3; i++) {
    int x = A[op][i], net = P[x];
    for (int j = 0; j < 3; j++) {
      if (A[op][j] == x) {
        if (j) {
          net++;
        } else {
          net--;
        }
      }
    }
    if (net > 9) {
      return false;
    }
  }
  return true;
}
void rem(int x) {
  P[x]--;
  for (int v : vo[x]) {
    if (ok(v)) {
      st.insert(v);
    }
  }
}
void add(int x) {
  P[x]++;
  for (int v : vo[x]) {
    if (!ok(v)) {
      st.erase(v);
    }
  }
}
int main() {
  if (fopen("input.txt", "r")) {
    freopen("input.txt", "r", stdin);
  }
  ios_base::sync_with_stdio(false);
  cin >> N;
  for (int i = 0; i < 4 * N; i++) {
    for (int j = 0; j < 3; j++) {
      cin >> A[i][j];
    }
    vo[A[i][1]].push_back(i);
    if (A[i][1] != A[i][2]) {
      vo[A[i][2]].push_back(i);
    }
    st.insert(i);
  }
  fill_n(P + 1, N, 4);
  cout << "YES\n";
  while (!st.empty()) {
    int i = *st.begin();
    st.erase(st.begin());
    vis[i] = true;
    cout << i + 1 << ' ';
    rem(A[i][0]);
    add(A[i][1]);
    add(A[i][2]);
  }
  cout << endl;
}
