#include <iostream>#include <string>#include <vector>using namespace std;const int maxn = 31;struct edge{ int x; double l; edge(int xx, double ll):x(xx),l(ll) {}};string names[maxn];int n, m;double map[maxn][maxn];bool found;int getid(string &a){ int i; for (i = 0; i < n; i++) if (a == names[i]) return i; return 0;}void init(){ int i; string name1, name2; double l; getchar(); for (i = 0; i < n; i++) { cin >> names[i]; map[i][i] = 1; getchar(); } scanf("%d", &m); getchar(); for (i = 0; i < m; i++) { cin >> name1; cin >> l; cin >> name2; map[getid(name1)][getid(name2)]=l; }}void floyd(){ int i, j, k; found = false; for (k = 0; k < n; k++) for (i = 0; i < n; i++) for (j = 0; j < n; j++) if (map[i][j] < map[i][k] * map[k][j]) map[i][j] = map[i][k] * map[k][j]; for (i = 0; i < n; i++) if (map[i][i] > 1) { found = true; break; }}int main(){ int t = 0; while (cin >> n && n != 0) { init(); found = false; printf("Case %d: ", ++t); floyd(); if (found) printf("Yesn"); else printf("Non"); } return 0;}