/* 千万要注意输出“Yes”和“No”的时候是首字母大写还是全大写 注意变量初始化 */ #include<stdio.h> #include<string.h> double map[35][35],hui; char s[35][150],nam[150],nam1[150]; int n,m,f,num=1,nnum; #define Max(a,b) (a)>(b)?(a):(b) void floyd() { int i,j,k; for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) { map[i][j]=Max(map[i][k]*map[k][j],map[i][j]); } double max=0; for(i=1;i<=n;i++) if(map[i][i]>max) max=map[i][i]; if(max>1) printf("Yes\n"); else printf("No\n"); } int name(char nn[]) { int i; for(i=1;i<nnum;i++) if(strcmp(nn,s[i])==0) return i; strcpy(s[nnum],nn); nnum++; return nnum-1; } int main() { int i,j; while(scanf("%d",&n),n) { nnum=1; f=0; memset(map,0,sizeof(map)); getchar(); for(i=1;i<=n;i++) { gets(nam); name(nam); } scanf("%d",&m); getchar(); for(i=1;i<=m;i++) { int n0,n1; scanf("%s %lf %s",nam,&hui,nam1); n0=name(nam); n1=name(nam1); map[n0][n1]=hui; if(n0==n1&&hui>1) f=1; } printf("Case %d: ",num++); if(f==1) printf("Yes\n"); else floyd(); } return 0; }