graph g; int n,a[1d5],b[1d5],c[1d5]; void no(){ wt("No"); exit(0); } void f(int i,int p,int d){ c[i]=d; rep[g.edge[i]](j,g.es[i]){ if(j!=p){ f(j,i,d+1); } } } { rd(n,(a--,b--)(n-1)); g.setEdge(n,n-1,a,b); int r=0; while(g.es[r]!=1)++r; f(r,r,0); int e=0; rep(i,r+1,n){ if(g.es[i]==1){ if(e==0){ e=c[i]; }else{ if(c[i]!=e){ no(); } } } } rep(i,r+1,n){ if(g.es[i]>2){ if(c[i]*2!=e){ no(); } } } wt("Yes"); }