#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair<ll,ll> pll; const int N=2e6+10; const int M=2e6+10; const int inf=0x3f3f3f3f; const ll mod=998244353; int h[N],ne[N],e[N],idx; int depth[N],sz[N]; int son[N]; int ans[N],cnt[N]; int flag; int id; int mx; void add(int a,int b){ e[idx]=b,ne[idx]=h[a],h[a]=idx++; } void dfs1(int u,int fa){ sz[u]=1; for(int i=h[u];i!=-1;i=ne[i]){ int j=e[i]; if(j==fa) continue; depth[j]=depth[u]+1; dfs1(j,u); sz[u]+=sz[j]; if(sz[j]>sz[son[u]]){ son[u]=j; } } } void cal(int u,int fa,int k){ int i; cnt[depth[u]]+=k; if(cnt[depth[u]]>mx){ mx=cnt[depth[u]]; id=depth[u]; } else if(cnt[depth[u]]==mx&&depth[u]<id){ id=depth[u]; } for(i=h[u];i!=-1;i=ne[i]){ int j=e[i]; if(j==fa||j==flag) continue; cal(j,u,k); } } void dfs(int u,int fa,int keep){ int i; for(i=h[u];i!=-1;i=ne[i]){ int j=e[i]; if(j==fa||j==son[u]) continue; dfs(j,u,0); } if(son[u]){ dfs(son[u],u,1); flag=son[u]; } cal(u,fa,1); ans[u]=id; flag=0; if(!keep){ cal(u,fa,-1); mx=id=0; } } int main(){ ios::sync_with_stdio(false); int n; cin>>n; int i; memset(h,-1,sizeof h); for(i=1;i<n;i++){ int a,b; cin>>a>>b; add(a,b); add(b,a); } depth[1]=1; dfs1(1,-1); dfs(1,-1,0); for(i=1;i<=n;i++){ cout<<ans[i]-depth[i]<<endl; } return 0; }