#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn=100002; int father[maxn],vis[maxn],n,m,ans,t,tmp; int Find(int x) { if(father[x]==x)return x; return father[x]=Find(father[x]); } void Union(int x,int y) { int xx=Find(x); int yy=Find(y); if(xx!=yy) { if(xx>yy)swap(xx,yy); father[yy]=xx; } if(xx==yy)//存在回路 tmp++; } int main() { int i,j,a,b,flag=1,Max=maxn; while(flag) { memset(vis,0,sizeof(vis)); for(i=1; i<=100000; i++) { father[i]=i; } tmp=0;Max=1; while(scanf("%d%d",&a,&b),(a||b)) { if(a==-1&&b==-1) { flag=0; break; } vis[a]=1; vis[b]=1; Max=max(Max,max(a,b)); Union(a,b); } if(!flag)continue; for(i=1; i<=Max; i++) { if(vis[i]&&father[i]==i)tmp++; } if(tmp<=1) printf("Yes\n"); else printf("No\n"); } return 0; }