#include<iostream>
#include<string>
#include<cmath>
#include<queue>
#include<map>
#include<set>
#include<list>
#include<iomanip>
#include<vector>
#include<functional>
#include<algorithm>
#include<cstdio>
#include<unordered_map>
using namespace std;
//---------------------------------------------------
//ライブラリゾーン!!!!
//#define int long long
#define str string
#define rep(i,j) for(int i=0;i<(int)(j);i++)
typedef long long ll;
typedef long double ld;
const ll inf = 4523372036854775807;
short gh[2][4] = { { 0,0,-1,1 },{ -1,1,0,0 } };
struct P {
ll pos, cost;
};
bool operator<(P a, P b) { return a.cost < b.cost; }
bool operator>(P a, P b) { return a.cost > b.cost; }
struct B {//隣接リスト表現
ll to, cost;
};
struct S {//辺の情報を入れる変数
int from, to, cost;
};
struct H {
int x, y;
};
bool operator<(H a, H b) {
if (a.x != b.x) return a.x < b.x;
return a.y < b.y;
}
bool operator>(H a, H b) {
if (a.x != b.x) return a.x > b.x;
return a.y > b.y;
}
ll gcm(ll i, ll j) {//最大公約数
if (i > j) swap(i, j);
if (i == 0) return j;
return gcm(j%i, i);
}
ld rad(ld a, ld b, ld c, ld d) {
return sqrt(pow(a - c, 2) + pow(b - d, 2));
}//rad=座標上の2点間の距離
int ari(int a, int b, int c) {
return (a + b)*c / 2;
}//等差数列の和
bool suf(ld a, ld b, ld c, ld d) {
if (b <= c || d <= a) return 0;
return 1;
}//[a,b),[c,d)
//---------------------------------------------------
//+++++++++++++++++++++++++++++++++++++++++++++++++++
int n, u, pa[100000], b[100000];
vector<int>e[100000];
H a[100000];
signed main() {
cin >> n;
for (int i = 1; i < n; i++) {
cin >> u;
e[u].push_back(i);
e[i].push_back(u);
}
queue<int>q;
q.push(0);
while (!q.empty()) {
int t = q.front(); q.pop();
for (int i = 0; i < e[t].size(); i++) {
if (e[t][i] != pa[t]) {
pa[e[t][i]] = t;
q.push(e[t][i]);
a[e[t][i]] = H{ a[t].y,e[t][i] };
}
}
}
sort(a, a + n);
for (int i = n - 1; i > 0; i--)
b[pa[i]] += b[i] + 1;
for (int i = 0; i < n; i++) {
int sum = 0;
if (i != 0)
sum = b[0] - b[i];
for (int j = 0; j < e[i].size(); j++) {
if (e[i][j] != pa[i])
sum = max(sum, b[e[i][j]]+1);
}
cout << sum << endl;
}
getchar(); getchar();
}