#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;

#define RG register int
#define LL long long

template<typename elemType>
inline void Read(elemType &T){
    elemType X=0,w=0; char ch=0;
    while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
    while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
    T=(w?-X:X);
}

struct edge{int Next,to;};
edge G[400010];
int head[200010],Max[200010],H[200010],F[200010],g[200010],Ans[200010];
int N,cnt=2;

inline void Add_Edge(int u,int v){
    G[cnt].to=v;
    G[cnt].Next=head[u];
    head[u]=cnt++;
}

int DFSB(int u,int fa,int x){
    if(u>x) return 0;
    int Res=1;
    for(int i=head[u];i;i=G[i].Next){
        int v=G[i].to;
        if(v==fa) continue;
        Res+=DFSB(v,u,x);
    }
    return Res;
}

void DFSA(int u,int fa){
    for(int i=head[u];i;i=G[i].Next){
        int v=G[i].to;
        if(v==fa) continue;
        Max[v]=max(Max[u],v);
        DFSA(v,u);
    }
    if(u>Max[fa]){
        H[u]=1;
        for(int i=head[u];i;i=G[i].Next){
            int v=G[i].to;
            if(v==fa) continue;
            F[v]=DFSB(v,u,u);
            g[v]=DFSB(v,u,Max[fa]);
            H[u]+=g[v];
        }
    }
    return;
}

void DFSC(int u,int fa){
    for(int i=head[u];i;i=G[i].Next){
        int v=G[i].to;
        if(v==fa) continue;
        Ans[v]=Ans[u];
        if(u>Max[fa]) Ans[v]+=F[v]-g[v];
        if(Max[v]>Max[u]) Ans[v]+=H[v];
        DFSC(v,u);
    }
    return;
}

int main(){
    Read(N);
    for(RG i=1;i<=N-1;++i){
        int u,v;Read(u);Read(v);
        Add_Edge(u,v);
        Add_Edge(v,u);
    }
    Max[1]=1;F[1]=1;DFSA(1,0);
    DFSC(1,0);
    for(RG i=2;i<=N;++i)
        printf("%d ",Ans[i]);
    return 0;
}