import sys;input = lambda: sys.stdin.readline().rstrip() n = int(input()) Adj = [set() for _ in range(n)] Leaves = set() for i in range(n-1): a, b = map(int,input().split()) a -= 1 b -= 1 Adj[a].add(b) Adj[b].add(a) if a not in Leaves: if len(Adj[a]) == 1: Leaves.add(a) else: Leaves.remove(a) if b not in Leaves: if len(Adj[b]) == 1: Leaves.add(b) else: Leaves.remove(b) n_l = len(Leaves) if n_l == 2: print('Yes') exit() if n%n_l != 1: print('No') exit() ans = 'Yes' Vertices = set(range(n)) while Vertices and n > 2: nxtLeaves = set() Candidates = set() for l in Leaves: Vertices.remove(l) for x in Adj[l]: Candidates.add(x) if len(Adj[x]) == 2: nxtLeaves.add(x) if nxtLeaves == set() and len(Candidates) == 1: break elif len(nxtLeaves) == n_l: for nl in nxtLeaves: Adj[nl] = [a for a in Adj[nl] if a not in Leaves] Leaves = nxtLeaves else: ans = 'No' break n -= len(Leaves) print(ans)