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.util.TreeSet;

public class Main
{

static ArrayList<Integer>adj[];
static boolean vis[];
static int freq[];
static int level[];
static LinkedHashMap<String,Integer>mp=new LinkedHashMap<>();
static Set<String>set=new TreeSet<>();
static int q;
public static void main(String args[])
{
  Scanner ab=new Scanner(System.in);
  
 q=ab.nextInt();
 
 
 adj=new ArrayList[1002];
 for(int i=0;i<1002;i++)
 adj[i]=new ArrayList<Integer>();  
 
 
 int cnt=2;int cnt2=0;String tie="";
 for(int i=0;i<q-1;i++)
 {

   int u=ab.nextInt();
   adj[u].add(cnt);
   cnt++;
 }
 //System.out.println(tie);
 //for(int i=0;i<=q+1;i++)System.out.println(adj[i]);
 vis=new boolean [1002];
 freq=new int[1002];
   
    dfs(1);boolean fl=false;
    for(int i=0;i<1002;i++)
    {
      if(adj[i].size()==0)continue;
      if(freq[i]<3){fl=true;break;}
    }
    if(!fl)System.out.println("Yes");
    else System.out.println("No");
       // System.out.println(Arrays.toString(freq)); 
 
 
}

public static void dfs(int i)
{
  
  vis[i]=true;
  
  
 //System.out.println(Arrays.toString(level));
  int m=0;
  for(int t=0;t<adj[i].size();t++)
  {
    if(!vis[adj[i].get(t)])
    {
    if(adj[adj[i].get(t)].size()==0)freq[i]++;
     dfs(adj[i].get(t));
      
    }
  }
 
  
}



}