利用基数排序:
#include <bits//stdc++.h>
using namespace std;
struct 
{
    int a,b,c;
    int next;
}elem[2001];

int main()
{
int n,m;
cin>>n>>m;
int a,b,c;
for(int i=1;i<=n;i++) 
{
    cin>>a>>b>>c;
    elem[i].next=i+1;
    elem[i].a=a;
    elem[i].b=b;
    elem[i].c=c;
}
elem[0].next=1;elem[n].next=-1;
int k,p,j,q;
    
    
    int f3[60],e3[60];
    memset(f3,0,sizeof(f3));
    p=elem[0].next;
    while(p!=-1)
    {
        k=elem[p].b;
        if(f3[k]==0) f3[k]=p;
        else elem[e3[k]].next=p;
        e3[k]=p;
        p=elem[p].next;
    }
    j=0;
    while(f3[j]==0) j++;
    elem[0].next=f3[j];
    q=e3[j];
    for(int i=j+1;i<60;i++)
        if(f3[i]!=0)
        {
            elem[q].next=f3[i];
            q=e3[i];    
        }    
    elem[q].next=-1;
    
    int f2[24],e2[24];
    memset(f2,0,sizeof(f2));
    p=elem[0].next;
    while(p!=-1)
    {
        k=elem[p].a;
        if(f2[k]==0) f2[k]=p;
        else elem[e2[k]].next=p;
        e2[k]=p;
        p=elem[p].next;
    }
    j=0;
    while(f2[j]==0) j++;
    elem[0].next=f2[j];
    q=e2[j];
    for(int i=j+1;i<24;i++)
        if(f2[i]!=0)
        {
            elem[q].next=f2[i];
            q=e2[i];    
        }
    elem[q].next=-1;
    
    int f1[5001],e1[5001];
    memset(f1,0,sizeof(f1));
    p=elem[0].next;
    while(p!=-1)
    {
        k=elem[p].c;
        if(f1[k]==0) f1[k]=p;
        else elem[e1[k]].next=p;
        e1[k]=p;
        p=elem[p].next;
    }
    j=5000;
    while(f1[j]==0) j--;
    elem[0].next=f1[j];
    q=e1[j];
    for(int i=j-1;i>0;i--)
        if(f1[i]!=0)
        {
            elem[q].next=f1[i];
            q=e1[i];    
        }
    elem[q].next=-1;
    
p=elem[0].next;
for(int i=0;i<m;i++)
{
a=elem[p].a;
b=elem[p].b;
c=elem[p].c;
printf("%d %d %d\n",a,b,c);
p=elem[p].next;
}
 
return 0;
}