#include <iostream>
using namespace std;
struct node{
int data,next,above;
}list[100000];
int main(){
int start,n;
cin>>start>>n;
int num=n;
while(num--){
int address;
cin>>address;
cin>>list[address].data>>list[address].next;
}
//添加前驱地址
int p=start;
int above=start;
list[p].above=-1;//链表首节点无前驱
int N=0;
for(;p!=-1;p=list[p].next){
if(p==start){
continue;
}
list[p].above=above;
above=p;
}
int end_address;
for(int m=start;m!=-1;m=list[m].next){
N++;
end_address=m;
//printf("%05d %d %05d\n",list[m].above,list[m].data,list[m].next);
}
//cout<<end_address;
//按题意输出
bool flag=false;
if(N%2==0)flag=true;
N/=2;
while(N--){
//尾节点先输出
printf("%05d %d %05d\n",end_address,list[end_address].data,start);
//头节点后输出
end_address=list[end_address].above;
if(N==0&&flag)printf("%05d %d -1\n",start,list[start].data);
else printf("%05d %d %05d\n",start,list[start].data,end_address);
//更新
start=list[start].next;
}
if(!flag){
printf("%05d %d -1\n",start,list[start].data);
}
return 0;
}