#include #include #include #include using namespace std; typedef long long ll; const int inf = 1000000000; int parent[10000]; vector sons[10000]; int dp[10000][10000]; bool visited[10000]; void dfs(int x, int last, int p) { for (int i = 0; i < (int) sons[x].size(); i++) { if (sons[x][i] != last) { dp[p][sons[x][i]] = dp[p][x]+1; dfs(sons[x][i], x, p); } } if (parent[x] != -1 && parent[x] != last) { dp[p][parent[x]] = dp[p][x]+1; dfs(parent[x], x, p); } } int main() { int N; while (scanf("%d", &N) == 1) { for (int i = 0; i < N; i++) { sons[i].clear(); } for (int i = 1; i < N; i++) { scanf("%d", &parent[i]); sons[parent[i]].push_back(i); } for (int i = 0; i < N; i++) { dfs(i, -1, i); visited[i] = false; } int cur = 0, ans = 0; for (int i = 1; i < N; i++) { printf("%d ", cur); visited[cur] = true; int maxd = -1, maxd_j = -1; for (int j = 0; j < N; j++) { if (dp[cur][j] > maxd && !visited[j]) { maxd = dp[cur][j]; maxd_j = j; } } ans += maxd; visited[maxd_j] = true; cur = maxd_j; } printf("%d\n", cur); } return 0; }