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.io.*;
import java.util.HashSet;
import java.util.StringTokenizer;

//solution classes here

public class Code {

    //main solution here

    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        PrintWriter out = new PrintWriter(System.out);
        int n = sc.nextInt();
        int dp[][] = new int[n+1][n+1];
        HashSet<Integer> nl = new HashSet<>();
        for(int i=2;i<=n;i++) {
            int a = sc.nextInt();
            nl.add(a);
            dp[a][i]=1;
            for(int j=1;j<=n;j++) {
                if(dp[j][a]==1)
                    dp[j][a]=0;
            }
        }
        boolean flag=true;
        for(int i : nl) {
            int sum=0;
            for(int j=1;j<=n;j++) {
                if(dp[i][j]==1)
                    sum++;
            }
            if(sum<3) {
                flag = false;
                break;
            }
        }
        if(flag)
            out.println("Yes");
        else
            out.println("No");



        out.flush();
        out.close();
    }


    //solution functions here

    /*
     *************************************************************************************************************************
     *************************************************************************************************************************
     *************************************************************************************************************************
     * #########  #######  ######  ########  ##  ###   ##  ##    ##  #######  ##    ##  #######  ##   ##  #######  ########
     * ##    ###  ##       ##      ########  ##  ## #  ##   ##  ##   ##       ##    ##  ##       ##  ##   ##       ##    ##
     * ##    ###  #######  ######     ##     ##  ##  # ##     ##     #######  ##    ##  ##       ####     #######  ########
     * ##    ###  ##           ##     ##     ##  ##   ###     ##     ##       ##    ##  ##       ##  ##   ##       ##   ##
     * #########  #######  ######     ##     ##  ##    ##     ##     ##       ########  #######  ##   ##  #######  ##     ##
     *************************************************************************************************************************
     *************************************************************************************************************************
     *************************************************************************************************************************
     */

    static class Scanner {
        StringTokenizer st;
        BufferedReader br;

        public Scanner(InputStream s) {
            br = new BufferedReader(new InputStreamReader(s));
        }

        public Scanner(FileReader fileReader) {
            br = new BufferedReader(fileReader);
        }

        public String next() throws IOException {
            while (st == null || !st.hasMoreTokens())
                st = new StringTokenizer(br.readLine());
            return st.nextToken();
        }

        public int nextInt() throws IOException {
            return Integer.parseInt(next());
        }

        public double nextDouble() throws  IOException{
            return Double.parseDouble(next());
        }

        public long nextLong() throws IOException {
            return Long.parseLong(next());
        }

        public String nextLine() throws IOException {
            return br.readLine();
        }

        public boolean ready() throws IOException {
            return br.ready();
        }
    }
}

/* ***************************************************************************************************************************
 * I'M NOT IN DANGER, I'M THE DANGER!!!
 * ***************************************************************************************************************************
 */