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

public class Lengthy {
  public static void main(String args[]) throws Exception {
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
Scanner sc = new Scanner(System.in);
    String line;
    while((line = in.readLine()) != null) { if(line.equals("")) break;
	int N = Integer.parseInt(line);
	Node[] nodes = new Node[N];
	for(int i = 0; i < N; i++) nodes[i] = new Node(N, i);
	for(int i = 1; i < N; i++) {
	  int e = Integer.parseInt(in.readLine());
	  Node n1 = nodes[i];
	  Node n2 = nodes[e];
	  n1.addadj(n2);
	  n2.addadj(n1);
	}
	for(int i = 0; i < N; i++) {
		for(int j = 0; j < N; j++) nodes[j].expanded = false;
		dfs(nodes[i], nodes[i], 0);
	}

	boolean used[] = new boolean[N];
	int current = 0;
	used[0] = true;
	

	StringBuilder sb = new StringBuilder();
	sb.append(current);
	for(int i = 1; i < N; i++) {
		int max = Integer.MIN_VALUE;
		int maxoffset = -1;
		for(int j = 0; j < N; j++) {
			if(!used[j] && current!=j && nodes[current].dists[j] > max) {
				max = nodes[current].dists[j];
				maxoffset = j;
			}
		}
		used[maxoffset] = true;
		current = maxoffset;
		sb.append(' '); sb.append(current);
	}
	System.out.println(sb.toString());
	for(int i = 0; i < N; i++) nodes[i].adj = null;
	in.readLine();
    }
  }

  static void dfs(Node orig, Node n, int length) {
    n.expanded = true;
    orig.dists[n.pos] = length;
    for(Node other : n.adj) {
	if(other.expanded) continue;
	dfs(orig, other, length+1);
    }
  }

  static class Node {
    LinkedList<Node> adj = new LinkedList<Node>();
    int[] dists;
    boolean expanded = false;
    int pos;

    public Node(int N, int pos) { dists = new int[N]; this.pos = pos; }
    public void addadj(Node other) { adj.add(other); }
  }
}
