Problem: Consider a rooted tree. A rooted tree has one special vertex called the root. All edges are directed from the root. Vertex u is called a child of vertex v and vertex v is called a parent of vertex u if there exists a directed edge from v to u. A vertex is called a leaf if it doesn't have children and has a parent.

Let's call a rooted tree a spruce if its every non-leaf vertex has at least 3 leaf children. You are given a rooted tree, check whether it's a spruce.

The definition of a rooted tree can be found [here](https://goo.gl/1dqvzz).

Input

The first line contains one integer n — the number of vertices in the tree (3 ≤ n ≤ 1 000). Each of the next n - 1 lines contains one integer pi (1 ≤ i ≤ n - 1) — the index of the parent of the i + 1-th vertex (1 ≤ pi ≤ i).

Vertex 1 is the root. It's guaranteed that the root has at least 2 children.

Output

Print "Yes" if the tree is a spruce and "No" otherwise.

Examples

Input

4
1
1
1


Output

Yes


Input

7
1
1
1
2
2
2


Output

No


Input

8
1
1
1
1
3
3
3


Output

Yes

Note

The first example:

<image>

The second example:

<image>

It is not a spruce, because the non-leaf vertex 1 has only 2 leaf children.

The third example:

<image>

Solution (in PYTHON3):

Solution:
class Node:
	def __init__(self, num):
		self.num = num
		self.children = []
	
	def add_child(self, child):
		self.children.append(child)
		
	def is_leaf(self):
		return len(self.children) == 0
		
	def check_spruciness(self):
		if self.is_leaf():
			return True
		leafs = 0
		for child in self.children:
			if child.is_leaf():
				leafs += 1
			elif not child.check_spruciness():
				return False
		return (leafs >= 3)
	
	def description(self):
		string = str(self.num) + "{"
		for child in self.children:
			string += child.description()
		return string + "}"
	
	
class Tree:
	def __init__(self, count, root):
		self.count = count
		self.root = root
		
	@classmethod
	def get_tree_from_array(cls, tree):
		assert len(tree) == tree[0]
		count = tree[0]
		tree = tree[1:]
		nodes = [Node(1)]
		for i in range(len(tree)):
			nodes.append(Node(i+1))
		
		for i in range(len(tree)):
			parentNum = tree[i] - 1
			if parentNum >= 0 and parentNum < len(nodes):
				nodes[parentNum].add_child(nodes[i+1])
			else:
				return None
				
		root = nodes[0]
		return cls(count=count, root=root)
		
	def check_spruce(self):
		if self.root.check_spruciness():
			print("Yes")
		else:
			print("No")
		

#list = [8,1,1,1,1,2,2,2] #yes
#list = [13,1,2,2,2,1,6,6,6,1,10,10,10] #no
#list = [7,1,2,2,1,1,1] #no
#list = [12,1,1,1,5,1,5,5,5,6,6,6] #yes

count = int(input())
list = [count]
for i in range(count - 1):
    x = int(input())
    list.append(x)
tree = Tree.get_tree_from_array(list)
tree.check_spruce()