Pagini recente » links/carti | Cod sursa (job #2005517) | Cod sursa (job #465076) | Planificare infoarena | Cod sursa (job #171768)
Cod sursa(job #171768)
#include <stdio.h>
#include <string.h>
#define MAX_N 5005
#define FIN "sortare.in"
#define FOUT "sortare.out"
int N, A[MAX_N], B[MAX_N], C[MAX_N], P[MAX_N], Q[MAX_N];
int solve(int n)
{
int i, j, t, ret;
if (n == 1) { P[n] = 1; return 1; }
t = (A[n] != B[n]) && (A[n] != C[n]) && (B[n] != C[n]);
if (t)
{
ret = solve(n-2)+1;
for (i = j = 1; i <= n; ++i)
if (i == A[n])
Q[i] = 1;
else
if (i == B[n])
Q[i] = 2;
else
Q[i] = P[j++]+2;
}
else
{
ret = solve(n-1)+1;
t = A[n] == B[n] || A[n] == C[n] ? A[n] : B[n];
for (i = j = 1; i <= n; ++i)
if (i == t)
Q[i] = 1;
else
Q[i] = P[j++]+1;
}
memcpy(P+1, Q+1, n*sizeof(int));
return ret;
}
int main(void)
{
int i;
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%d", &N);
for (i = 2; i <= N; ++i)
scanf("%d %d %d", A+i, B+i, C+i);
printf("%d\n", solve(N));
for (i = 1; i <= N; ++i)
printf("%d ", P[i]);
printf("\n");
return 0;
}