#include <bits/stdc++.h>
using namespace std;
bool st[100010];
int main() {
ios::sync_with_stdio(false); cin.tie(0);
string init;
int n;
cin >> init >> n;
map<string, pair<int, string>> link;
vector<tuple<string, int, string>> all;
for (int i = 0; i < n; i++) {
string address, ne;
int val;
cin >> address >> val >> ne;
link[address] = {val, ne};
}
string curadd = init;
while (true) {
all.push_back({curadd, link[curadd].first, link[curadd].second});
if (link[curadd].second == "-1") break;
curadd = link[curadd].second;
}
vector<tuple<string, int, string>> del;
vector<tuple<string, int, string>> after;
for (int i = 0; i < all.size(); i++) { //删除重复结点
//cout << get<0>(all[i]) << " " << get<1>(all[i]) << " " << get<2>(all[i]) << "\n";
string add = get<0>(all[i]), ne = get<2>(all[i]);
int val = get<1>(all[i]);
if (st[abs(val)]) { //如果已经出现过
del.push_back({add, val, ne});
} else {
st[abs(val)] = true;
after.push_back({add, val, ne});
}
}
for (int i = 0; i < after.size(); i++) {
string add = get<0>(after[i]), ne = get<2>(after[i]);
int val = get<1>(after[i]);
if (i == after.size() - 1) { //当前是最后一个结点 结尾为-1
after[i] = {add, val, "-1"};
} else {
if (ne != get<0>(after[i + 1])) {
after[i] = {add, val, get<0>(after[i + 1])};
}
}
}
for (int i = 0; i < del.size(); i++) {
string add = get<0>(del[i]), ne = get<2>(del[i]);
int val = get<1>(del[i]);
if (i == del.size() - 1) { //当前是最后一个结点 结尾为-1
del[i] = {add, val, "-1"};
} else {
if (ne != get<0>(del[i + 1])) {
del[i] = {add, val, get<0>(del[i + 1])};
}
}
}
for (int i = 0; i < after.size(); i++) {
string add = get<0>(after[i]), ne = get<2>(after[i]);
int val = get<1>(after[i]);
cout << add << " " << val << " " << ne << "\n";
}
for (int i = 0; i < del.size(); i++) {
string add = get<0>(del[i]), ne = get<2>(del[i]);
int val = get<1>(del[i]);
cout << add << " " << val << " " << ne << "\n"[i == del.size() - 1];
}
return 0;
}