Once upon a time there was only one router in the well-known company Bmail. Years went by and over time new routers were purchased. Every time they bought a new router, they connected it to one of the routers bought before it. You are given the values p_i — the index of the router to which the i-th router was connected after being purchased (p_i < i).

There are n routers in Boogle in total now. Print the sequence of routers on the path from the first to the n-th router.

Input

The first line contains integer number n (2 ≤ n ≤ 200000) — the number of the routers. The following line contains n-1 integers p_2, p_3, ..., p_n (1 ≤ p_i < i), where p_i is equal to index of the router to which the i-th was connected after purchase.

Output

Print the path from the 1-st to the n-th router. It starts with 1 and ends with n. All the elements in the path should be distinct.

Examples

Input

8
1 1 2 2 3 2 5


Output

1 2 5 8 

Input

6
1 2 3 4 5


Output

1 2 3 4 5 6 

Input

7
1 1 2 3 4 3


Output

1 3 7 
//codeforces_1057A

import java.io.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static java.lang.Math.*;
import java.math.*;

public class Main{

	static PrintWriter go = new PrintWriter(System.out);

	public static void main(String args[]) throws IOException,FileNotFoundException {
		BufferedReader gi = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(gi.readLine());
		int[] l = parseArray(gi);
		Graph gr = new Graph(n);
		for ( int k = 2; k <= n; k++){
			gr.addEdge(l[k-2],k);
		}
		gr.dfs(1);
		int size = gr.traversal.size();
		for ( int k = size-1; k >= 0; k--){
			go.print(gr.traversal.get(k)+" ");
		}
		go.println();

		go.close();
	}

	static int[] parseArray(BufferedReader gi) throws IOException{
		String[] line = gi.readLine().trim().split(" ");
		int[] rez = new int[line.length];
		for ( int k = 0; k < line.length; k++){
			rez[k] = Integer.parseInt(line[k]);
		}
		return rez;
	}



}

class Graph{//directed, unweighted
	public int v;
	public ArrayList<Integer>[] adjList;
	public boolean[] visited;
	public boolean found;
	public ArrayList<Integer> traversal;
	Graph(int v){
		this.v = v;
		adjList = new ArrayList[v+1];
		for (int k = 0; k<=v; k++){ adjList[k] = new ArrayList<Integer>(); }
		visited = new boolean[v+1];
		for (int k = 0; k<=v; k++){ visited[k] = false; }
		found = false;
		traversal = new ArrayList<>();
	}
	
	public void addEdge(int source, int dest){
		adjList[source].add(dest);
		//adjList[dest].add(source);
	}

	public void dfs(int vertex){
		if ( found ){ return; }
		for ( Integer v : adjList[vertex] ){
			dfs(v);
		}
		if ( found ){
			traversal.add(vertex);
			return;
		}
		if ( vertex == v ){
			found = true;
			traversal.add(v);
		}
	}

}


