#include <iostream>
#include <string>
#include <unordered_map>
#include <vector>
#include <algorithm>
using namespace std;
struct Node{
char addr[6];
int data;
char next[6];
};
int main(void) {
string firstAddr;
int n, k;
cin >> firstAddr >> n >> k;
//将所有节点保存
unordered_map<string, Node> nodeMap;
nodeMap.reserve(n);
Node node;
for (int i(0); i < n; ++i) {
scanf("%s%d%s", node.addr, &node.data, node.next);
nodeMap.insert(pair<string, Node>(node.addr, node));
}
//选出所有在链表上的节点,依次一个一个串起来。
vector<Node> vec;
vec.reserve(n);
while (firstAddr != "-1") {
vec.push_back(nodeMap[firstAddr]);
firstAddr = nodeMap[firstAddr].next;
}
//每k个逆转
if (k > 1) {
auto iter(vec.begin()), end(vec.end() - k);
for (; iter <= end; iter += k)
reverse(iter, iter + k);
}
auto last(vec.size() - 1);
for (unsigned i(0); i < last; ++i)
printf("%s %d %s\n", vec[i].addr, vec[i].data, vec[i + 1].addr);
printf("%s %d %s\n", vec[last].addr, vec[last].data, "-1");
return 0;
}