#include using namespace std; int MAX_N = 200000; void dfs(vector> &dp, vector> &c, int v){ for (int w : c[v]){ dfs(dp, c, w); dp[v].first += dp[w].first + 1; dp[v].second += (dp[w].first + 1) * (dp[w].first + 1); } return; } int main(){ int N; cin >> N; assert(1 <= N); assert(N <= MAX_N); vector p(N); for (int i = 1; i < N; i++){ cin >> p[i]; assert(1 <= p[i]); assert(p[i] <= i); p[i]--; } vector> c(N); for (int i = 1; i < N; i++){ c[p[i]].push_back(i); } vector> dp(N); dfs(dp, c, 0); vector ans(N); for (int i = 0; i < N; i++){ ans[i] = (dp[i].first + 1) * (dp[i].first + 1) - dp[i].second; } for (int i = 0; i < N; i++){ cout << ans[i] << endl; } }