Pagini recente » Cod sursa (job #2367921) | Cod sursa (job #1238528) | Cod sursa (job #1568281) | Cod sursa (job #1902889) | Cod sursa (job #163489)
Cod sursa(job #163489)
#include<cstdio>
int n,a[5001],x[5001],y[5001],z[5001],nr,i;
inline int getnumber(int x,int y,int z)
{
if(x==y)
if(y==z)
return 1;
else
return 2;
else
if(y==z)
return 2;
else return 3;
}
inline int rem(int aux)
{
if(aux==1) return 1;
return aux-1;
}
inline int max(int x,int y){if(x<y)return y;return x;}
inline int getmax(int x,int y,int z)
{
return max(x,max(y,z));
}
inline int getmed(int x,int y,int z)
{
if(x<y)
if(y<z)
return y;
else
if(x<z)
return z;
else
return x;
}
void getsol(int n)
{
int aux,aux2;
nr++;
if(n<=1) {if(n==1)a[1]=1;return;}
aux=getnumber(x[n],y[n],z[n]);
getsol(n-rem(aux));
if(aux==1){
for(i=n-1;i>=x[n];i--)
a[i+1]=a[i];
a[x[n]]=n;
return;}
if(aux==2){
aux=getmax(x[n],y[n],y[n]);
for(i=n-1;i>=aux;i--)
a[i+1]=a[i];
a[aux]=n;
return;}
aux=getmax(x[n],y[n],z[n]);
for(i=n-2;i>=aux-1;i--)
a[i+2]=a[i];
a[aux]=n;
aux2=getmed(x[n],y[n],z[n]);
for(i=aux-2;i>=aux2;i--)
a[i+1]=a[i];
a[aux2]=n-1;
}
int main()
{
freopen("sortare.in","r",stdin);
freopen("sortare.out","w",stdout);
scanf("%d",&n);
for(i=2;i<=n;i++)
scanf("%d %d %d",&x[i],&y[i],&z[i]);
getsol(n);
printf("%d\n",nr);
for(i=1;i<=n;i++)
printf("%d ",a[i]);
fclose(stdout);
return 0;
}