#include #include using namespace std; class Vertex { public: vector children; int value; bool visited; Vertex(int val) : value(val), visited(false) { } void addChild(Vertex *child) { children.push_back(child); } int distanceTo(Vertex *dest, Vertex *from) { if (dest == this) return 0; for (size_t i = 0; i < children.size(); i++) { if (children[i] != from) { int currDist = children[i]->distanceTo(dest, this); if (currDist != -1) return currDist + 1; } } return -1; } }; int main() { int N = 0; while (scanf("%d", &N) > 0) { vector vertices(N); vertices[0] = new Vertex(0); for (int i = 1; i < N; i++) { vertices[i] = new Vertex(i); int parent = 0; scanf("%d", &parent); vertices[parent]->children.push_back(vertices[i]); vertices[i]->children.push_back(vertices[parent]); } int curr = 0; do { vertices[curr]->visited = true; int max = 0, maxI = 0; for (int i = 0; i < N; i++) { if (vertices[i]->visited) continue; int dist = vertices[curr]->distanceTo(vertices[i], NULL); if (dist > max) { max = dist; maxI = i; } } printf("%d", curr); curr = maxI; if (curr != 0) printf(" "); } while (curr != 0); printf("\n"); } return 0; }