/*
  AOJ 2207
  Title:Consistet Unit System
  @kankichi573
*/
#include <stdio.h>
#include <string.h>
#include <limits.h>
int N;
char unit[100][17];
int unit_cnt;
char unit1[17];
char unit2[17];
int relation[100][100];

check_dilemma()
{
        int i,j,k,flag;

        do {
          flag=0;
          for(i=0;i<unit_cnt;i++)
                for(j=0;j<unit_cnt;j++)
                {
                        if(relation[i][j]==INT_MAX || i==j)
                                continue;
                        for(k=0;k<unit_cnt;k++)
                        {
                                //printf("IJK=%d %d %d\n",i,j,k);

                                if(j==k)
                                        continue;
                                if(relation[j][k]!=INT_MAX)
                                {
                                        if(relation[i][k]==INT_MAX)
                                        {
                                                relation[i][k]=relation[i][j]+relation[j][k];
                                                flag=1;
                                        }
                                        else if(relation[i][k]!=relation[i][j]+relation[j][k])
                                                return(0);
                                        
                                }
                        }
                }
        }
        while(flag);

        return(1);
}
find_and_register(char u[])
{
        int i;

        //printf("UNIT=%s:",u);

        for(i=0;i<unit_cnt;i++)
                if(0==strcmp(&unit[i][0],u))
                   return(i);
                   
        strcpy(&unit[unit_cnt][0],u);
        return(unit_cnt++);
}
void init()
{
        int i,j;

        for(i=0;i<100;i++)
                for(j=0;j<100;j++)
                        if(i==j)
                                relation[i][j]=0;
                        else
                                relation[i][j]=INT_MAX;
}
void dump()
{
        int i,j;

        for(i=0;i<unit_cnt;i++)
                for(j=0;j<unit_cnt;j++)
                        printf("%s %s %d\n",unit[i],unit[j],relation[i][j]);

}
main()
{
        int i,j,ng,times,n1,n2,ret,x,y;

        while(EOF!=scanf("%d",&N) && N)
        {
                init();
                ng=0;
                unit_cnt=0;
                for(i=0;i<N;i++)
                {
                        scanf("%d %s = %d^%d %s",&x,unit1,&y,&times,unit2);
                        
                        n1=find_and_register(unit1);
                        n2=find_and_register(unit2);
                        
                        if(relation[n1][n2]!=INT_MAX && relation[n1][n2]!=times) //dilemma
                                ng=1;
                        else if(n1==n2 && times!=0)
                                ng=1;
                        else
                        {
                                relation[n1][n2]=times;
                                relation[n2][n1]=-times;
                        }
                }
                if(ng)
                        printf("No\n");
                else if(unit_cnt<2)
                        printf("Yes\n");
                else
                {
                        ret=check_dilemma();
                        printf("%s\n",ret?"Yes":"No");
                }
          dump();
        }
  return(0);
}