#include using ll = long long; using std::cin; using std::cout; using std::endl; std::mt19937 rnd(std::chrono::steady_clock::now().time_since_epoch().count()); template inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; } template inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; } const int inf = (int)1e9 + 7; const long long INF = 1LL << 60; namespace KKT89 { struct UnionFind { std::vector par; UnionFind(int n) { par.assign(n, -1); } int root(int a) { if (par[a] < 0) { return a; } return par[a] = root(par[a]); } int size(int a) { return -par[root(a)]; } bool connect(int a, int b) { a = root(a); b = root(b); if (a == b) { return false; } if (size(a) < size(b)) { std::swap(a, b); } par[a] += par[b]; par[b] = a; return true; } bool same(int a, int b) { return root(a) == root(b); } }; } void solve() { int n; cin >> n; KKT89::UnionFind uf(n); while(true) { int a, b; cin >> a >> b; std::string s; cin >> s; a -= 1, b -= 1; uf.connect(a, b); if(uf.size(0) == n) { cout << s << "\n"; return; } } } int main() { std::cin.tie(nullptr); std::ios::sync_with_stdio(false); int kkt = 1; // cin >> kkt; while(kkt--) solve(); return 0; }