Pagini recente » Cod sursa (job #142279) | Cod sursa (job #2703087) | Cod sursa (job #967964) | Cod sursa (job #2990183) | Cod sursa (job #173717)
Cod sursa(job #173717)
# include<stdio.h>
# define input "sortare.in"
# define output "sortare.out"
# define max 5001
int u[max],i,n,pos[max],j,pas,m,add;
int res, N;
struct pozitii
{
int x,y,z;
}p[max];
void solve(int n)
{
res++;
if( n == 1)
{
u[pos[1]] = 1;
return;
}
if(n == 2)
{
if(p[2].x == p[2].y || p[2].x == p[2].z)
u[pos[p[2].x]] = 1;
else
u[pos[p[2].y]] = 1;
return;
}
if ( p[n].x != p[n].y && p[n].y != p[n].z)
{
u[pos[ p[n].x ]] = n;
u[pos[ p[n].y ]] = n-1;
j = 0;
for(i=1;i<=N;i++)
if(!u[i])
pos[++j] = i;
solve(n-2);
}
else
{
if(p[n].x == p[n].y || p[n].x == p[n].z)
u[pos[ p[n].x ]] = n;
else
u[pos[ p[n].y ]] = n;
j = 0;
for(i=1;i<=N;i++)
if(!u[i])
pos[++j] = i;
solve (n-1);
}
}
int main()
{
freopen(input,"r",stdin);
freopen(output,"w",stdout);
scanf("%d",&n);
m = n;
for(i=2;i<=n;i++)
scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].z);
for ( i =1; i<= n; i++)
pos[i] = i;
N=n;
solve(n);
printf("%d\n",res);
for(i = 1; i<=n;i++)
{
if(!u[i]) u[i] = 2;
printf("%d ",u[i]);
}
return 0;
}