#include <iostream>
#include <cmath>
#include <tr1/unordered_map>
using namespace std;
using namespace std::tr1;
struct node{
int data,next,bz;
}list[100001];
int start,N;
int main()
{
cin>>start>>N;
int address;
while(N)
{
cin>>address;
cin>>list[address].data>>list[address].next;
list[address].bz=0;
N--;
}
unordered_map<int,int>mp;
bool fg=false;
for(int i=start;i!=-1;i=list[i].next){
int abs_data=abs(list[i].data);
++mp[abs_data];
if(mp[abs_data]>1)
{
list[i].bz=1;
fg=true;
}
}
bool flag=true;
for(int i=start;i!=-1;i=list[i].next){
if(list[i].bz==0)
{
if(flag)
{
printf("%05d %d",i,list[i].data);
flag=false;
}else{
printf(" %05d\n%05d %d",i,i,list[i].data);
}
}
}
printf(" -1\n");
flag=true;
for(int i=start;i!=-1;i=list[i].next){
if(list[i].bz==1)
{
if(flag)
{
printf("%05d %d",i,list[i].data);
flag=false;
}else{
printf(" %05d\n%05d %d",i,i,list[i].data);
}
}
}
if(fg)printf(" -1");
return 0;
}