#include<bits/stdc++.h>
using namespace std;
const int N=1e5+55;
int n,m;
bool st[N];
int p[N];
int afind(int x)
{
if(p[x]!=x) p[x]=afind(p[x]);
return p[x];
}
int main()
{
int i,j,k;
while(cin>>n)
{
int flag=1;
for(i=0;i<N;i++)
{
st[i]=false;
p[i]=i;
}
for(i=0;i<n;i++)
{
int w1,w2;
cin>>w1>>w2;
if(st[w1]==false) st[w1]=true;
if(st[w2]==false) st[w2]=true;
if(afind(w1)==afind(w2))
{
flag=0;
}
else
{
p[afind(w1)]=afind(w2);
}
}
int sum=0;
for(i=1;i<=N;i++)
{
if(p[i]==i&&st[i]==true)
{
sum++;
}
}
if(sum>1) flag=0;
if(flag==1) cout<<"Yes"<<'\n';
else if(flag==0) cout<<"No"<<'\n';
}
return 0;
}
//首先通过并查集判断输入的数据是否有可能成环,比如输入的当前两点要进行合并但是此时发现两者祖宗节点相同,这就说明两者共同连接着一个相同的点,在连接当前两点一定会成环
//还有一种不满足的条件是所给的点根本连接不起来即最后判断根节点有几个大于1说明不成连通图