Link to this code: https://cses.fi/paste/063ad63a10f84549c50c12/
/* 777 */
#include <bits/stdc++.h>
using namespace std;

using VI = vector <int>;
using VII = vector <VI>;

int subtree_size[200010];
VI graph[200010];

void dfs(int node) {
    for (int child : graph[node]) {
        dfs(child);
        subtree_size[node] += 1 + subtree_size[child];
    }
}

int main() {
    int n; cin >> n;

    for (int child = 2 ; child <= n ; ++child) {
        int parent; cin >> parent;
        graph[parent].push_back(child);
    }

    dfs(1);
    for (int node = 1 ; node <= n ; node++) cout << subtree_size[node] << " ";
    return 0;
}