#include <iostream>
#include <vector>
using namespace std;
struct node
{
int address, key, next;
}nod[100010];
int main()
{
int begin, n, k;
scanf("%d%d%d", &begin, &n, &k);
node cur;
int i;
for(i = 1; i <= n; i++)
{
scanf("%d%d%d", &cur.address, &cur.key, &cur.next);
nod[cur.address] = cur;
}
vector<node> v[2];
while(begin != -1)
{
cur = nod[begin];
v[0].push_back(cur);
begin = cur.next;
}
int size = v[0].size(), group = size / k, j;
for(i = 0; i < group; i++)
{
for(j = (i + 1) * k - 1; j >= i * k; j--)
{
v[1].push_back(v[0][j]);
}
}
for(i = group * k; i < size; i++)
{
v[1].push_back(v[0][i]);
}
for(i = 0; i < size; i++)
{
cur = v[1][i];
printf("%05d %d ", cur.address, cur.key);
if(i + 1 < size)
{
printf("%05d\n", v[1][i + 1].address);
}
else
{
printf("-1\n");
}
}
system("pause");
return 0;
}