#include <cstdio>
#include <cstring>
int n,m;
double dis[31][31],rate;
char name[31][30],name1[30],name2[30];

int getpos(char *s)
{
    int i;
    for(i=1;i<=n;i++)
    {
        if(strcmp(s,name[i])==0)
        {
            return i;
        }
    }
    return 0;
}

int main()
{
    int i,j,k,casenum = 0;
    while(scanf("%d",&n),n!=0)
    {
        casenum++;
        memset(dis,0,sizeof(dis));
        for(i=1;i<=n;i++)
        {
            dis[i][i] = 1.0;
            scanf("%s",name[i]);
        }
        scanf("%d",&m);
        for(i=1;i<=m;i++)
        {
            scanf("%s%lf%s",name1,&rate,name2);
            dis[getpos(name1)][getpos(name2)] = rate;
        }
        bool flag = true;
        for(k=1;k<=n && flag;k++)
        {
            for(i=1;i<=n;i++)
            {
                for(j=1;j<=n;j++)
                {
                    if(dis[i][j] < dis[i][k] * dis[k][j])
                        dis[i][j] = dis[i][k] * dis[k][j];
                }
                if(dis[i][i] > 1.0)
                {
                    printf("Case %d: Yes\n",casenum);
                    flag = false;
                    break;
                }
            }
        }
        if(flag)
            printf("Case %d: No\n",casenum);
    }
    return 0;
}

posted on 2011-07-29 13:53  NKHe!!oWor!d  阅读(122)  评论(0编辑  收藏  举报