#include <bits/stdc++.h>
using namespace std;

// 定义无向图的邻接表表示
vector<vector<int>> adj;

// BFS函数，返回从起点开始的所有节点的距离
vector<int> bfs(int start, int n) {
    vector<int> dist(n + 1, -1); // 节点编号从1到n
    queue<int> q;
    q.push(start);
    dist[start] = 0;
    while (!q.empty()) {
        int u = q.front(); q.pop();
        for(auto &v : adj[u]) {
            if(dist[v] == -1){
                dist[v] = dist[u] + 1;
                q.push(v);
            }
        }
    }
    return dist;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    
    int n;
    cin >> n;
    adj.assign(n + 1, vector<int>());
    for(int i=0;i<n-1;i++){
        int u, v;
        cin >> u >> v;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }

    // 第一次 BFS，找出u
    vector<int> dist1 = bfs(1, n);
    int u = 1;
    for(int i=1;i<=n;i++) {
        if(dist1[i] > dist1[u]) u = i;
    }

    // 第二次 BFS，从u找出v，并记录d1
    vector<int> d1 = bfs(u, n);
    int v = u;
    for(int i=1;i<=n;i++) {
        if(d1[i] > d1[v]) v = i;
    }

    // 第三次 BFS，从v找出d2
    vector<int> d2 = bfs(v, n);

    // 输出每个节点的最远距离
    for(int i=1;i<=n;i++) {
        cout << max(d1[i], d2[i]) << (i==n ? '\n' : ' ');
    }
}