#include<bits/stdc++.h>

using namespace std;
#define n nnathw
#define ll long long
#define pb push_back
#define MAX 200200

int n;
vector<int> adj[MAX];
int pos[MAX], head[MAX], treesize[MAX], depth[MAX], parent[MAX];
int cnt = 0;

void nhap()
{
    cin >> n;
    for(int i = 0; i<n-1; i++){
        int a,b; cin >> a >> b;
        adj[a].pb(b);
        adj[b].pb(a);
    }
    depth[1] = 0;
    parent[1] = 0;
}

void dfs(int v, int par)
{
    treesize[v] = 1;
    int index = -1;
    int ans_index = -1;
    for(int u : adj[v]){
        ++index;
        if(u == par) continue;
        parent[u] = v;
        depth[u] = depth[v] + 1;
        dfs(u,v);
        treesize[v] += treesize[u];
        if(ans_index == -1 || treesize[u] > treesize[adj[v][ans_index]]) ans_index = index;
    }
    if(ans_index != -1 && ans_index != 0) swap(adj[v][0], adj[v][ans_index]);
}

void decompose(int v, int par, int h)
{
    head[v] = h;
    pos[v] = ++cnt;
    for(int u : adj[v]){
        if(u == par) continue;
        if(u == adj[v][0]){
            decompose(u,v,h);
        }else{
            decompose(u,v,u);
        }
    }
}

void process()
{
    vector<int> a(n+2,0);
    for(int i = 1; i<n; i++){
        int u = i;
        int v= i+1;
        while(head[u] != head[v]){
            if(depth[head[u]] < depth[head[v]]) swap(u,v);
            a[pos[head[u]]]++;
            a[pos[u] + 1]--;
            u = parent[head[u]];
        }
        if(depth[u] > depth[v]) swap(u,v);
        a[pos[u]]++;
        a[pos[v] + 1]--;
    }
    for(int i = 1; i<=n; i++) a[i] = a[i-1] + a[i];
    for(int i = 1; i<=n; i++) cout << a[pos[i]] << ' ';
}

int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0);
    nhap();
    dfs(1,-1);
    decompose(1,-1,1);
    process();
    return 0;
}
