#include<iostream> #include<map> #include<vector> #include<string> #include<algorithm> using namespace std; const int maxn=111; int n,m; map<string,int>mp; string s[maxn]; string s1,s2; double g[maxn][maxn]; bool can[maxn][maxn]; int x,y,cas; double temp; bool vis[maxn]; bool floyd() { for(int k=1;k<=n;k++) { for(int i=1;i<=n;i++) { if(!g[i][k]) continue; if(g[i][i] > 1.0) { return true; } for (int j=1; j<=n; j++) { if ( !g[k][j] ) continue; temp= g[i][k] * g[k][j]; if ( temp > g[i][j] ) { g[i][j] = temp; } } } } return false; } int main() { cas=1; while(cin>>n) { memset(g,0,sizeof(g)); memset(vis,0,sizeof(vis)); memset(can,0,sizeof(can)); mp.clear(); if(!n) { break; } for(int i=1;i<=n;i++) { cin>>s[i]; mp[s[i]]=i; } cin>>m; for(int i=1;i<=m;i++) { cin>>s1>>temp>>s2; x=mp[s1]; y=mp[s2]; g[x][y]=temp; can[x][y]=true; } cout<<"Case "<<cas++<<": "; if(floyd()) { cout<<"Yes"<<endl; } else { cout<<"No"<<endl; } } return 0; }