#include<bits/stdc++.h>
using namespace std;
int main(){
int first,n,k,address;
cin>>first>>n>>k;
int data[100000],next[100000],list[100000];
for(int i=0;i<n;i++){
cin>>address;
cin>>data[address]>>next[address];
}
int sum = 0;//计数(节点个数),地址为-1时不计入
//按指针连接顺序存放节点的地址到list数组中
//list的下标就是结点的地址
while(first!=-1){
list[sum++] = first;
first = next[first];
}
//每k个元素反转,最后不到k个元素不反转
//即遍历到刚好只剩下最后k个元素的位置
for(int i=0;i<(sum-sum%k);i+=k)
reverse(begin(list)+i,begin(list)+i+k);
for(int i=0;i<sum-1;i++)
printf("%05d %d %05d\n", list[i], data[list[i]], list[i + 1]);
printf("%05d %d -1", list[sum - 1], data[list[sum - 1]]);
return 0;
}