code:
#include <stdio.h>
#define N 100002
int flag = 0, max = 0, num[N], rank[N], father[N];
void init()
{
for(int i = 0; i<N; i++)
{
num[i] = 0;
rank[i] = 0;
father[i] = i;
}
}
int find(int x)
{
if(father[x] != x)
father[x] = find(father[x]);
return father[x];
}
void Union(int x, int y)
{
if(rank[x]>rank[y])
father[y] = x;
else
{
if(rank[x]==rank[y])
rank[y]++;
father[x] = y;
}
}
void judge()
{
int i = 0, cnt = 0;
for(i = 1; i<=max; i++)
{
if(cnt == 0 && father[i] == i && num[i] == 1)
cnt++;
else if(cnt == 1 && father[i] == i && num[i] == 1)
{
flag = 1;
return ;
}
}
}
int main()
{
int a = 0, b = 0;
while(1)
{
flag = max = 0;
init();
scanf("%d %d", &a, &b);
if(a+b == -2) break;
while(a != 0 && b != 0)
{
num[a] = num[b] = 1;
if(a<b) max = b;
else max = a;
int fx = find(a), fy = find(b);
if(fx == fy) flag = 1;
else Union(fx, fy);
scanf("%d %d", &a, &b);
}
judge();
if(flag == 0) printf("Yes\n");
else printf("No\n");
}
return 0;
}