#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
using namespace std;
//将结点的data分成三段塞进vector再输出即可
struct node{
int id,data,next;
};
int main(){
int begin,n,k;
int s,d,e;
scanf("%d%d%d",&begin,&n,&k);
node a[100010];
vector<node>v,ans;//一个存输入,一个存结果
for(int i=0;i<n;i++){
scanf("%d%d%d",&s,&d,&e);
a[s].id=s;
a[s].data=d;
a[s].next=e;
}
for(;begin!=-1;begin=a[begin].next)
v.push_back(a[begin]);
for(int i=0;i<v.size();i++)
if(v[i].data<0) ans.push_back(v[i]);
for(int i=0;i<v.size();i++)
if(v[i].data>=0 && v[i].data<=k)
ans.push_back(v[i]);
for(int i=0;i<v.size();i++)
if(v[i].data>k)
ans.push_back(v[i]);
for(int i=0;i<ans.size()-1;i++)
printf("%05d %d %05d\n",ans[i].id,ans[i].data,ans[i+1].id);
//注意上面不能打印结点结构体的next,其结果已经改变
//打印最后一个结点
printf("%05d %d -1\n",ans[ans.size()-1].id,ans[ans.size()-1].data);
system("pause");
return 0;
}