#include using namespace std; int N; vector< vector > G,son; vector S; vector par,top; void DFS(int R) { // dopln par, top for(int i =0; i < G[R].size(); i++) if(G[R][i] != par[R]) { top[G[R][i]] =top[R]; par[G[R][i]] =R; DFS(G[R][i]);} } int main() { while(cin >> N) { son.resize(N); G.resize(N); for(int i =1; i < N; i++) { int a; cin >> a; son[a].push_back(i); G[a].push_back(i); G[i].push_back(a);} S.resize(N); for(int i =N-1; i >= 0; i--) { S[i] =1; for(int j =0; j < son[i].size(); j++) S[i] +=S[son[i][j]];} int cen =-1; for(int i =0; i < N; i++) { int s =N-1; bool ok =true; for(int j =0; j < son[i].size(); j++) { s -=S[son[i][j]]; if(S[son[i][j]] > N/2) ok =false;} if(s > N/2) ok =false; if(ok) cen =i;} par.resize(N,-1); top.resize(N,-1); par[cen] =top[cen] =cen; for(int i =0; i < G[cen].size(); i++) { top[G[cen][i]] =G[cen][i]; par[G[cen][i]] =cen; DFS(G[cen][i]);} set< pair > S; vector< vector > V(N); for(int i =0; i < N; i++) if(i != cen) V[top[i]].push_back(i); for(int i =0; i < N; i++) S.insert(make_pair(V[i].size(),i)); cout << cen; int x =cen; for(int i =1; i < N; i++) { pair p =*S.rbegin(); if(p.second != x) { x =p.second; cout << " " << (*V[p.second].rbegin()); V[p.second].pop_back(); S.erase(--S.end()); p.first--; S.insert(p); continue;} S.erase(--S.end()); pair r =*S.rbegin(); S.erase(--S.end()); S.insert(p); x =r.second; cout << " " << (*V[r.second].rbegin()); V[r.second].pop_back(); r.first--; S.insert(r);} G.clear(); S.clear(); par.clear(); top.clear(); son.clear(); cout << "\n";} }