#include #define endl '\n' using namespace std; const int MAXN = 10000 + 5; map mp; int getInd(string s) { if (mp[s]) return mp[s]; return mp[s] = mp.size(); } struct node { int v; double tg; node () {}; node (int _v, double _tg) { v = _v; tg = _tg; }; }; vector G[MAXN]; double d[MAXN]; int main () { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cout << fixed << setprecision(10); freopen("trade.in", "r", stdin); freopen("trade.out", "w", stdout); int n; cin >> n; for (int i = 1; i <= n; i++) { string a, b; double x; cin >> a >> b >> x; int ind1 = getInd(a); int ind2 = getInd(b); G[ind1].push_back(node(ind2, x)); } int bgn = getInd("BGN"); d[bgn] = 1; for (int t = 1; t <= n; t++) { for (int i = 1; i <= n; i++) { for (int j = 0; j < G[i].size(); j++) { if (d[i] * G[i][j].tg > d[G[i][j].v]) { d[G[i][j].v] = d[i] * G[i][j].tg; } } } } for (int i = 1; i <= n; i++) { for (int j = 0; j < G[i].size(); j++) { if (d[i] * G[i][j].tg > d[G[i][j].v]) { cout << "YES" << endl; exit(0); } } } cout << "NO" << endl; return 0; } /** 3 BGN USD 1.86 USD EUR 1.05 EUR BGN 0.52 */