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 
//http://codeforces.com/problemset/problem/1057/A

import java.util.*;
import java.io.*;

public class Network{
	static ArrayList<Integer> v1=new ArrayList<Integer>();
	static ArrayList<ArrayList<Integer>> v=new ArrayList<ArrayList<Integer>>();
	public static void main(String args[])
	{
		Reader rd=new Reader();
		int n=rd.nextInt();
		for(int i=0;i<=n;i++){
			v.add(new ArrayList<Integer>());
		}
		for(int i=2;i<=n;i++){
			int x=rd.nextInt();
			v.get(x).add(i);
		}
		int k=dfs(1,n);
		v1.add(1);
		for(int i=v1.size()-1;i>=0;i--){
			int x=v1.get(i);
			rd.pf(x+" ");
		}
	}
	static int dfs(int u,int n)
	{
		if(u==n) return 1;
		int z=0;
		for(int i=0;i<v.get(u).size();i++){
			int x=v.get(u).get(i);
			int y=dfs(x,n);
			if(y==1){
				z=1;
				v1.add(x);
			}
		}
		return z;
	}
	static class Reader {
		static BufferedReader br;
		static StringTokenizer st;
		public Reader() {
			this.br = new BufferedReader(new InputStreamReader(System.in));
		}
		public int[] na(int n) {
			int[] a = new int[n];
			for (int i = 0; i < n; i++) a[i] = nextInt();
			return a;
		}
		public int nextInt() {
			if (st == null || !st.hasMoreTokens())
				try {
					readLine();
				} catch (Exception e) {
				}
			return Integer.parseInt(st.nextToken());
		}
		public double nextDouble() {
			if (st == null || !st.hasMoreTokens())
				try {
					readLine();
				} catch (Exception e) {
				}
			return Double.parseDouble(st.nextToken());
		}
		public Long nextLong() {
			if (st == null || !st.hasMoreTokens())
				try {
					readLine();
				} catch (Exception e) {
				}
			return Long.parseLong(st.nextToken());
		}
		public String next() {
			if (st == null || !st.hasMoreTokens())
				try {
					readLine();
				} catch (Exception e) {
				}
			return st.nextToken();
		}
		public String nextLine() {
			String s="";
			try{
				s=br.readLine();
			}catch(Exception e){}
			return s;
		}
		public void pf(Object p)
		{
			System.out.print(p);
		}
		private static void readLine() {
			try {
				st = new StringTokenizer(br.readLine());
			} catch (Exception e) {
			}
		}
	}
}