#include #include #include #include #include #include #include #include #include #include #include using namespace std; #define FOR(prom, a, b) for(int prom = (a); prom < (b); prom++) #define FORD(prom, a, b) for(int prom = (a); prom > (b); prom--) #define FORDE(prom, a, b) for(int prom = (a); prom >= (b); prom--) #define DRI(a) int a; scanf("%d ", &a); #define DRII(a, b) int a, b; scanf("%d %d ", &a, &b); #define RI(a) scanf("%d ", &a); #define RII(a, b) scanf("%d %d ", &a, &b); #define PB push_back #define MP make_pair #define pii pair #define ll long long #define ull unsigned long long #define MM(co, cim) memset((co), (cim), sizeof((co))) #define DEB(x) cerr << ">>> " << #x << " : " << x << endl; int n, t, lp[10014], cm, cmx, li, ri, sw; vector g[10014], res; vector ts; void god (int x, int dist) { if (lp[x]) return; lp[x] = 1; ts.PB(MP(dist, x)); FOR(i, 0, g[x].size()) god(g[x][i], dist + 1); } void go (int x, int dist) { if (lp[x]) return; lp[x] = 1; if (dist > cm) { cm = dist; cmx = x; } FOR(i, 0, g[x].size()) go(g[x][i], dist + 1); } int main () { while (scanf("%d", &n) == 1) { res.clear(); ts.clear(); FOR(i, 0, 10014) g[i].clear(); FOR(i, 1, n) { scanf("%d", &t); g[i].PB(t); g[t].PB(i); } cm = 0; MM(lp, 0); go(0, 0); MM(lp, 0); god(cmx, 0); sort(ts.begin(), ts.end()); li = 0; ri = ts.size() - 1; sw = 0; while (li <= ri) { if (sw) { res.PB(ts[ri].second); --ri; } else { res.PB(ts[li].second); ++li; } sw = 1 - sw; } FOR(i, 0, res.size()) printf("%d%s", res[i], i == res.size() - 1 ? "\n" : " "); } return 0; }