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 JAVA):

Solution:
import java.util.*;
import java.io.*;

public class graph1
{
	static LinkedList<Integer> adj[];
    public static void main(String args[])throws IOException
    {
         BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
         int n=Integer.parseInt(br.readLine());
         adj=new LinkedList[n+2];
         for(int i=0;i<=n;i++)
         {
           adj[i]=new LinkedList<Integer>();
         }
         for(int i=1;i<=n-1;i++)
         {
         	int p=Integer.parseInt(br.readLine());
            adj[p].add((Integer)(i+1));
         }
         bfs(1,n);
    }
    public static  void bfs(int s,int n)
    {
    	int count=0,count1=1;
    	Queue<Integer> q=new LinkedList<Integer>();
    	q.offer(s);
    	while(!q.isEmpty() && count1<n)
    	{ 
             int v=(Integer)q.poll();
             //System.out.print(v+"->");
             for(int i=0;i<adj[v].size();i++)
             {
             	if((!adj[v].isEmpty()) && (adj[(Integer)(adj[v].get(i))].isEmpty()))
                     count++;
                 if(!adj[(Integer)(adj[v].get(i))].isEmpty())
             	q.offer((Integer)(adj[v].get(i)));
             	//System.out.print(adj[v].get(i)+"->");
             	count1++;
             }
             //System.out.println();
             //System.out.println("count="+" "+count);
             if(count<3)
             {
             	System.out.println("No");
             	return;
             }
             count=0;
    	}
    	System.out.println("Yes");
    }	
}