#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
#include <map>
using namespace std;
const int M = 100;
double dist[M][M];
map<string, int>m;
string s, s1, s2;
int n;
int main()
{
int t;
double d;
int q= 1;
while(cin>>n){
if(!n)
break;
for(int i = 1; i <= n; i++){
cin>>s;
m[s] = i;
}
memset(dist, 0, sizeof(dist));
scanf("%d", &t);
for(int i = 0; i < t; i++){
cin>>s1>>d>>s2;
dist[m[s1]][m[s2]] = d;
}
for(int k = 1; k <= n; k++){
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
if(dist[i][k]*dist[k][j] > dist[i][j]){
dist[i][j] = dist[i][k]*dist[k][j];
}
}
}
}
int flag = 0;
// for(int i = 1; i <= n; i++)
// for(int j = 1; j <= n; j++)
// if(dist[i][j]*dist[j][i] > 1)
// flag = 1;
for(int i = 1; i <= n; i++)
if(dist[i][i] > 1) //表示一种钱币经过一系列的转化后回到自己,大于1表示有收益。
flag = 1;
if(flag)
printf("Case %d: Yes\n", q++);
else
printf("Case %d: No\n", q++);
}
return 0;
}