#include<iostream>
#include<math.h>
#include<stdlib.h>
#include<ctype.h>
#include<algorithm>
#include<vector>
#include<string.h>
#include<queue>
#include<stack>
#include<set>
#include<map>
#include<sstream>
#include<time.h>
#include<utility>
#include<malloc.h>
#include<stdexcept>
using namespace std;
int p[1000000];
int sset[100020];
int a,b;
int num=0;
int find (int i)
{
if (i==p[i])
return i;
else
return find (p[i]);
}
void un (int a,int b)
{
int fa = find (a);
int fb = find (b);
if (fa == fb )
{
num++;//判断是否成环
return ;
}
else
{
if (fa>fb)
p[fa]=fb;
else
p[fb]=fa;
}
}
int main ()
{
while (cin>>a>>b)
{
num=0;
if (a==-1 && b==-1)
break;
if (a==0 && b==0)
{
printf("Yes\n");
continue;
}
for (int i=1;i<=100010;i++)
{
p[i]=i;
sset[i]=0;
}
un(a,b);
sset[a]=1;
sset[b]=1;
while (cin>>a>>b)
{
if (a==0 && b==0)
break;
sset[a]=1;
sset[b]=1;
un(a,b);
}
int count=0;
for(int i=1;i<=100010;i++)
{
if (sset[i] && i==p[i])//判断图是否联通 只要最后判断根节点的总数为1即可。
count++;
}
if (count>1)
printf("No\n");
else
if (num == 0)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}