#include <bits/stdc++.h>
using namespace std;
#define faster ios_base::sync_with_stdio(false); cin.tie(NULL)
#define Bit(mask , i) ((mask >> i) & 1)
#define fi first
#define se second
#define _LOG2(nl) 31 - __builtin_clz(nl)
#define c_bit(nl) __builtin_popcount(nl)
#define ii pair<long long , int>
#define lll pair<long long , pair<long long , long long>>
#define lii pair<long long , pair<long long , int>>
#define iii pair<int , pair<int , int>>
#define iiii pair<pair<int , int> , pair<int , int>>
#define llll pair<pair<__int128 , __int128> , pair<__int128 , __int128>>
#define li pair<long long , int>
#define db long double
#define onBit(mask , i) (mask | (1 << i))
#define offBit(mask , i) (mask & (~(1 << i)))

const long long INF = 1e16;
const int N = 2e5 + 7;
int max1[N] , max2[N] , n;
vector<int> a[N];

void dfs(int u , int p){
    for (int v : a[u]) if (v != p){
        dfs(v , u);

        max2[u] = max(max2[u] , max1[v] + 1);
        if (max2[u] > max1[u]) swap(max1[u] , max2[u]);
    }
}

void inp(){
    cin >> n;

    for (int i = 1 ; i < n ; ++i){
        int u , v;
        cin >> u >> v;
        a[u].push_back(v);
        a[v].push_back(u);
    }

    dfs(1 , 0);
}

void dfs_reroot(int u , int p){
    for (int v : a[u]) if (v != p){
        if (max1[v] + 1 == max1[u]) max2[v] = max(max2[v] , max2[u] + 1);
        else max2[v] = max(max2[v] , max1[u] + 1);

        if (max2[v] > max1[v]) swap(max1[v] , max2[v]);
        dfs_reroot(v , u);
    }
}

void solve(){
    dfs_reroot(1 , 0);

    for (int i = 1 ; i <= n ; ++i){
        cout << max1[i] << " ";
    }
}

int main(){
//    freopen("difmax.inp" , "r" , stdin);
//    freopen("difmax.out" , "w" , stdout);
    faster;
    inp();
    solve();
    return 0;
}
