import sys sys.setrecursionlimit(1000000) N = int(input()) G = {i:[] for i in range(1,N+1)} for _ in range(N-1): a,b = map(int,input().split()) G[a].append(b) G[b].append(a) A = [] for i in range(1,N+1): if len(G[i])==1: A.append(i) if len(A)==2: ans = "Yes" else: from collections import deque u = A[0] dist = [-1]*(N+1) dist[u] = 0 que = deque([u]) while que: v = que.popleft() for i in G[v]: if dist[i]<0: dist[i] = dist[v]+1 que.append(i) if dist[A[1]]%2==1: ans = "No" else: B = [A[0]] def dfs(i,p): global A,B if i==A[1]: return True for j in G[i]: if j==p:continue B.append(j) if dfs(j,i): return True B.pop() return False dfs(A[0],-1) rt = B[len(B)//2] dist = [-1]*(N+1) dist[rt] = 0 que = deque([rt]) while que: u = que.popleft() for v in G[u]: if dist[v]<0: dist[v] = dist[u]+1 que.append(v) d = dist[A[0]] ans = "Yes" for u in A: if dist[u] != d: ans = "No" break print(ans)