#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 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, gp[10014], lp[10014], d[10014], cm, cmx, tx; vector g[10014], res; void go (int x, int dist) { if (gp[x] || 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(); 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(gp, 0); MM(lp, 0); go(0, 0); FOR(i, 0, n) { MM(lp, 0); cm = 0; res.PB(cmx); tx = cmx; go(cmx, 0); gp[tx] = 1; } FOR(i, 0, res.size()) printf("%d%s", res[i], i == res.size() - 1 ? "\n" : " "); } return 0; }