#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;
struct Node{
int val;
int addr;
}ans1[100010],ans2[100010];
int used[10010];
int Next[100010], val[100010];
int first, N, n1, n2;
int main(){
memset(used, 0, sizeof(used));
int add, key, next;
scanf("%d %d", &first, &N);
for(int i = 0; i < N; i++){
scanf("%d %d %d", &add, &key, &next);
val[add] = key;
Next[add] = next;
}
while(first != -1){
if(used[abs(val[first])] == 0){
used[abs(val[first])] = 1;
ans1[n1].val = val[first];
ans1[n1++].addr = first;
}else if(used[abs(val[first])] == 1){
ans2[n2].val = val[first];
ans2[n2++].addr = first;
}
first = Next[first];
}
int i;
if(n1 > 0){
for(i = 0; i < n1 - 1; i++){
printf("%05d %d %05d\n", ans1[i].addr, ans1[i].val, ans1[i+1].addr);
}printf("%05d %d -1\n", ans1[i].addr, ans1[i].val);
}
if(n2 > 0){
for(i = 0; i < n2 - 1; i++){
printf("%05d %d %05d\n", ans2[i].addr, ans2[i].val, ans2[i+1].addr);
}printf("%05d %d -1\n", ans2[i].addr, ans2[i].val);
}
return 0;
}