Pagini recente » Cod sursa (job #1414282) | Cod sursa (job #1538256) | Cod sursa (job #779671) | Cod sursa (job #2132122) | Cod sursa (job #168821)
Cod sursa(job #168821)
#include <stdio.h>
#include <assert.h>
#define FOR(i,s,d) for(i=(s);i<(d);++i)
#define nmax 5002
int sol,n,P[nmax],A[nmax],B[nmax],C[nmax];
void doit(int n);
void baga(int n,int a,int b,int j)
{
int i,x=-j;
doit(n+j);
for(i=n;i;--i)
{
if(i==a)
P[i]=1,j++;
else
if(i==b)
P[i]=2,j++;
else
P[i]=P[i+j]+x;
}
}
void doit(int n)
{
sol++;
if(n==1)
{
P[1]=1;
return ;
}
if(A[n]!=B[n] && B[n]!=C[n] && A[n]!=C[n])
baga(n,A[n],B[n],-2);
else
baga(n,(A[n]==B[n] || A[n]==C[n])?A[n]:C[n],-1,-1);
}
int main()
{
freopen("sortare.in","r",stdin);
freopen("sortare.out","w",stdout);
scanf("%d",&n);
assert(1<=n && n<=5000);
int i;
FOR(i,2,n+1)
{
scanf("%d %d %d",&A[i],&B[i],&C[i]);
assert(1<=A[i] && A[i]<=i);
assert(1<=B[i] && B[i]<=i);
assert(1<=C[i] && C[i]<=i);
}
doit(n);
printf("%d\n",sol);
FOR(i,1,n+1)
printf("%d ",P[i]);
printf("\n");
return 0;
}