<p>传送门:<a target=_blank href="http://acm.hdu.edu.cn/showproblem.php?pid=2094" target="_blank">http://acm.hdu.edu.cn/showproblem.php?pid=2094</a></p><p>
</p><p><pre name="code" class="cpp">/*
	一道形似拓扑排序的题HDOJ2094
	本质上考察的是对图论的理解
	
	冠军的产生:当且仅当某个点的入度为0,才可能为冠军!
	由此:
		此题的最佳做法不是建图,而是直接统计每个点的入度
	若只有一个节点u的入度为0,即:只可能是u为冠军
	
	最后,本题的难点归在了如何判断每个字母串(运动员名字)之前是否出现过
	用char或者string均可轻松完成
*/
//下面贴代码 

#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <math.h>
#include <vector>
#include <string>
#include <cstring>
#include <sstream>
using namespace std;

#define input freopen("input.txt","r",stdin);
#define output freopen("output.txt","w",stdout);
#define For1(i,a,b) for (i=a;i<b;i++)
#define For2(i,a,b) for (i=a;i<=b;i++)
#define Dec(i,a,b) for (i=a;i>b;i--)
#define Dec2(i,a,b) for (i=a;i>=b;i--)
#define Sca_d(x) scanf("%d",&x)
#define Sca_s(x) scanf("%s",x)
#define Sca_c(x) scanf("%c",&x)
#define Sca_f(x) scanf("%f",&x)
#define Sca_lf(x) scanf("%lf",&x)
#define Fill(x,a) memset(x,a,sizeof(x))
#define MAXN 0x7fffffff

#define MAX 1000 
char ch[MAX][MAX];
char c[MAX];
int in[MAX];

int main()
{
	//input;
	int n,num,i,j,k,tot;
	while(cin>>n)
	{
		if (!n) break;
		Fill(in,0);
		tot=i=j=k=0;
		For2(i,1,n)
		{
			int flag=1;
			Sca_s(c);//第一个字符串输入只需判断之前的有无 
			For2(j,1,k)
				if (strcmp(ch[j],c)==0)
				{
					flag=0;break;
				}
			if (flag)
				k++,strcpy(ch[k],c);
			Sca_s(c);//第二个字符串 
			flag=1;
			For2(j,1,k)
				if (strcmp(ch[j],c)==0)//若之前出现过,则此点入度+1 
				{
					in[j]++;flag=0;break;
				}
			if (flag)//若之前未出现过,则先要新建一个节点,此点入度+1 
				k++,strcpy(ch[k],c),in[k]++;
		}
		For2(i,1,k)
			if (in[i]==0) tot++;
		if (tot==1)//当且仅当存在一个入度为0的节点 
			cout<<"Yes"<<endl;
		else
			cout<<"No"<<endl;
	}
	return 0;
}