#include<cstdio>
using namespace std;
int N, depth, A[5009], B[5009], C[5009], sol[5009], pos[5009];
void solve (int l, int v_max)
{
if (l <= 1)
{
depth ++;
for (int i=1; i<=N; i++)
if (pos[i])
sol[i] = v_max;
return ;
}
depth ++;
int P = 0, pa, pb, pc;
for (int j=1; j<=N; j++)
if (pos[j])
{
P ++;
if (P == A[l])
pa = j;
if (P == B[l])
pb = j;
if (P == C[l])
pc = j;
}
if (pa == pb || pb == pc)
{
sol[pb] = v_max;
pos[pb] = 0;
solve (l - 1, v_max - 1);
}
if (pa == pc)
{
sol[pa] = v_max;
pos[pa] = 0;
solve (l - 1, v_max - 1);
}
sol[pb] = v_max - 1;
sol[pa] = v_max;
pos[pb] = pos[pa] = 0;
solve (l - 2, v_max - 2);
}
int main()
{
freopen ("sortare.in", "r", stdin);
freopen ("sortare.out", "w", stdout);
scanf ("%d", &N), pos[1] = 1;
for (int i=2; i<=N; i++)
scanf ("%d %d %d", &A[i], &B[i], &C[i]), pos[i] = 1;
solve (N, N);
printf ("%d\n", depth);
for (int i=1; i<=N; i++)
printf ("%d ", sol[i]);
printf ("\n");
return 0;
}