#include <iostream>
#include <cstdio>
using namespace std;typedef struct node{int address;int data;int next;
}List;
void nodecopy(List &a,List&b){ //将a复制给bb.address=a.address;b.data=a.data;b.next=a.next;
}
void rsort(List a[],List b[],int n){ //将排好序的b重排赋给aint last=n-1,before=0,tmp=0;for(int i=0;i<n/2;i++){nodecopy(b[last],a[before]);nodecopy(b[tmp],a[before+1]);tmp++;before+=2;last--;}if(n%2){ //如果是奇数个结点,处理最后一个结点nodecopy(b[last],a[before]);}for(int i=0;i<n-1;i++){ //处理重排好的链表的连接地址a[i].next=a[i+1].address;}a[n-1].next=-1;}int main()
{int first_address,n;cin >> first_address>>n;List a[n];for(int i=0;i<n;i++){cin >> a[i].address >> a[i].data >> a[i].next;}List b[n];int Count=1;for(int i=0;i<n;i++){ //寻找第一个结点放在b[0]if(a[i].address==first_address){nodecopy(a[i],b[0]);}}while(Count < n){ //将输入的结点按顺序排好for(int i=0;i<n;i++){if(a[i].address==b[Count-1].next){nodecopy(a[i],b[Count++]);}}if(b[Count-1].next==-1) break; //如果next==-1,就跳出}rsort(a,b,Count); //重拍b赋给afor(int i=0;i<Count;i++){ //输出链表if(i<Count-1)printf("%05d %d %05d\n",a[i].address,a[i].data,a[i].next);elseprintf("%05d %d %d\n",a[i].address,a[i].data,a[i].next);}return 0;
}