#include<stdio.h>
#include<iostream>
#include<set>
using namespace std;
const int MAX=10005;
int pre[MAX];
void init(){
for(int i=1;i<MAX;i++)
pre[i]=i;
}
int find(int x){
if(pre[x]==x) return x;
return pre[x]=find(pre[x]);
}
void unite(int x,int y){
x=find(x);
y=find(y);
if(x==y) return;
pre[x]=y;
}
bool same(int x,int y){
return find(x)==find(y);
}
int x,y;
int main(){
while(~scanf("%d%d",&x,&y)&&(x!=-1)){
if(x==0&&y==0){
printf("Yes\n");
continue;
}
set<int>st;
bool flag=true;
int cnt=0;
init();
unite(x,y);
st.insert(x);
st.insert(y);
while(~scanf("%d%d",&x,&y)&&x) {
if(same(x,y)) flag=false;
if(flag) unite(x,y);
st.insert(x);
st.insert(y);
}
for(auto it=st.begin();*it!=st.end();*it++){
if(*it==find(*it)) cnt++;
}
if(cnt>1) flag=false;
if(flag) printf("Yes\n");
else printf("No\n");
}
return 0;
}
07-18