834 {
835 string address0;
836 int n;
837 int k;
838 cin >> address0 >> n >> k;
839 unordered_map<string, pair<int, string>> nodes;
840 for(int i = 0; i < n; i++) {
841 string address;
842 string next;
843 int data;
844 cin >> address >> data >> next;
845 nodes.insert(make_pair(address, make_pair(data, next)));
846 }
847 vector<pair<string, int>> vec;
848 string current_addr = address0;
849 while(current_addr != "-1") {
850 auto [data, next] = nodes[current_addr];
851 vec.emplace_back(current_addr, data);
852 current_addr = next;
853 }
854 n = vec.size();
855 for(int i = 0; i < n - n % k; i += k) {
856 reverse(vec.begin() + i, vec.begin() + i + k);
857 }
858 for(int i = 0; i < n; i++) {
859 cout << vec[i].first << ' ' << vec[i].second << ' ' << (i + 1 < n ? vec[i + 1].first : "-1") << endl;
860 }
861 return 0;
862 }