#include <algorithm>#include <iostream>using namespace std;const int MAXN = 100000+5;int par[MAXN];bool vis[MAXN];int numVis;int numEdge;bool flagCircle=false;void init(){ for(int i=0; i<MAXN; i++){ par[i] = i; vis[i] = false; } numVis = 0; numEdge = 0; flagCircle = false;}int find(int x){ return x == par[x] ? x : par[x] = find(par[x]);}void unite(int x,int y){ if(x==y) x = find(x); y = find(y); if(x == y){ flagCircle=true; return ; } par[x] = y; numEdge++;}int main(){ int lon=0; while( true ){ lon=0; init( ); int a,b; scanf("%d%d",&a,&b); if( a==0 && b==0 ){ printf("Yes\n"); continue; } if( a==-1 && b==-1 ) break; vis[a] = true; vis[b] = true; unite( a,b ); lon = max(max(a,b),lon); while( true ){ //scanf("%d%d",&a,&b); cin >> a >> b; if( a==0 && b==0 ) break; vis[a] = true; vis[b] = true; unite( a , b ); lon = max(max(a,b),lon); } for( int i=0 ; i<=lon ; i++ ) if( vis[i] ) numVis++; if( !flagCircle && numEdge+1 == numVis ) // printf("Yes\n"); cout << "Yes" << endl; else // printf("No\n"); cout << "No" << endl;} return 0;}