关键:注意各处05d,还有啃爹的特判,0 -1,也就是一个有效节点都没有
#define LOCAL
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <queue>
using namespace std;
const int maxn=100010;
struct Link{
int data;
int addr;
int next;
int order;
}node[maxn];
bool cmp(Link a,Link b){
return a.order<b.order;
}
bool cmp1(Link a,Link b){
return a.data<b.data;
}
int main()
{
#ifdef LOCAL
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
#endif // LOCAL
int first,n;
for(int i=0;i<maxn;i++) node[i].order=maxn;
scanf("%d%d",&n,&first);
int add;
for(int i=0;i<n;i++){
scanf("%d",&add);
scanf("%d%d",&node[add].data,&node[add].next);
node[add].addr=add;
}
int p=first;
int cnt=0;
while(p!=-1){
node[p].order=cnt++;
p=node[p].next;
}
if(cnt==0) printf("0 -1");
else{
sort(node,node+maxn,cmp);
sort(node,node+cnt,cmp1);
for(int i=0;i<cnt-1;i++){
node[i].next=node[i+1].addr;
}
node[cnt-1].next=-1;
printf("%d %05d\n",cnt,node[0].addr);
for(int i=0;i<cnt;i++){
if(i!=cnt-1)
printf("%05d %d %05d\n",node[i].addr,node[i].data,node[i].next);
else printf("%05d %d %d\n",node[i].addr,node[i].data,node[i].next);
}
}
return 0;
}