#include #include #include #include using namespace std; int main() { int n; cin >> n; vector> graph(n + 1); vector distance(n + 1, -1); for (int i = 2; i <= n; ++i) { int parent; cin >> parent; graph[parent].push_back(i); } queue q; q.push(1); distance[1] = 0; while (!q.empty()) { int current = q.front(); q.pop(); for (int child: graph[current]) { if (distance[child] == -1) { distance[child] = distance[current] + 1; q.push(child); } } } int maxDistance = *max_element(distance.begin(), distance.end()); vector farthestNodes; for (int i = 1; i <= n; ++i) { if (distance[i] == maxDistance) { farthestNodes.push_back(i); } } cout << maxDistance << endl; cout << farthestNodes.size() << endl; for (int node: farthestNodes) { cout << node << " "; } cout << endl; return 0; }