#include <bits/stdc++.h>
using namespace std;
int n, tp, tot = 1, a[1000009], b[1000009], c[1000009], q[1000009],
           fst[1000009], cur[1000009], pnt[1000009], len[1000009], nxt[1000009];
bool bo[1000009], vis[1000009];
void add(int x, int y, int z) {
  pnt[++tot] = y;
  len[tot] = z;
  nxt[tot] = fst[x];
  fst[x] = tot;
}
void dfs(int x, bool flag) {
  int i;
  for (i = cur[x]; i; i = cur[x]) {
    cur[x] = nxt[i];
    if (!vis[i]) {
      if (!flag) {
        bo[i] = 1;
        vis[i] = vis[i ^ 1] = 1;
      } else
        vis[i] = 1;
      dfs(pnt[i], flag);
      q[++tp] = len[i];
    }
  }
  cur[x] = 0;
}
int main() {
  scanf("%d", &n);
  n <<= 2;
  int i;
  for (i = 1; i <= n; i++) {
    scanf("%d%d%d", &a[i], &b[i], &c[i]);
    add(b[i], c[i], i);
    add(c[i], b[i], i);
  }
  for (i = 1; i <= n; i++) cur[i] = fst[i];
  for (i = 1; i <= n; i++)
    if (cur[i]) dfs(i, 0);
  for (i = 2; i <= tot; i += 2) {
    if (!bo[i]) swap(b[i >> 1], c[i >> 1]);
  }
  tot = tp = 0;
  memset(fst, 0, sizeof(fst));
  for (i = 1; i <= n; i++) {
    add(b[i], a[i], i);
  }
  for (i = 1; i <= n; i++) cur[i] = fst[i];
  memset(vis, 0, sizeof(vis));
  for (i = 1; i <= n; i++)
    if (cur[i]) dfs(i, 1);
  puts("YES");
  for (i = 1; i <= n; i++) printf("%d%c", q[i], i < n ? ' ' : '\n');
  return 0;
}
