
#include<stdio.h>
struct node{
int address;
int data;
int next;
};
int main(){
int i,sa,N,K,sub_s;
scanf("%d %d %d\n",&sa,&N,&K);
int neg_num[N],pos_num[N],overK[N];//记录符合范围的值的下标
int len_n = 0;
int len_p = 0;
int len_o = 0;
struct node num[N];
for (i=0;i<N;i++)
{
scanf("%d %d %d\n",&num[i].address,&num[i].data,&num[i].next);
if (num[i].address==sa)//找到第一个元素的下标
sub_s = i;
}
while (num[sub_s].next!=-1)//没有到最末
{
if (num[sub_s].data<0)
neg_num[len_n++] = sub_s;
else if (num[sub_s].data>K)
overK[len_o++] = sub_s;
else
pos_num[len_p++] = sub_s;
for (i=0;i<N;i++)
{
if (num[i].address==num[sub_s].next)
{
sub_s = i;
break;//找到了一定要跳出,不然sub_s在改变,重新寻找将对新的结点找下一个结点,是错误的
}
}
}
if (num[sub_s].data<0)//因为最后一个结点还没有运行就出来了,因此需要再补一次
neg_num[len_n++] = sub_s;
else if (num[sub_s].data>K)
overK[len_o++] = sub_s;
else
pos_num[len_p++] = sub_s;
for (i=0;i<len_n;i++)
{
if (i!=len_n-1)
printf("%05d %d %05d\n",num[neg_num[i]].address,num[neg_num[i]].data,num[neg_num[i+1]].address);
else
{
printf("%05d %d",num[neg_num[i]].address,num[neg_num[i]].data);
if (len_p==0 && len_o==0)
printf(" -1");
else if (len_p!=0)
printf(" %05d\n",num[pos_num[0]].address);
else
printf(" %05d\n",num[overK[0]].address);
}
}
for (i=0;i<len_p;i++)
{
if (i!=len_p-1)
printf("%05d %d %05d\n",num[pos_num[i]].address,num[pos_num[i]].data,num[pos_num[i+1]].address);
else
{
printf("%05d %d",num[pos_num[i]].address,num[pos_num[i]].data);
if (len_o==0)
printf(" -1");
else
printf(" %05d\n",num[overK[0]].address);
}
}
for (i=0;i<len_o;i++)
{
if (i!=len_o-1)
printf("%05d %d %05d\n",num[overK[i]].address,num[overK[i]].data,num[overK[i+1]].address);
else
printf("%05d %d -1\n",num[overK[i]].address,num[overK[i]].data);
}
return 0;
}