#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+5;
int n,f[N],dis[N][3],son[N][3],G[N];
vector<int>e[N];
void dfs(int x,int fa){
for(auto v:e[x]){
if(v==fa)continue;
dfs(v,x);
f[x]=max(f[x],f[v]+1);
if(dis[v][0]+1>dis[x][1]){
dis[x][1]=dis[v][0]+1;
son[x][1]=v;
}
if(dis[x][1]>dis[x][0]){
swap(dis[x][1],dis[x][0]);
swap(son[x][1],son[x][0]);
}
}
}
void dfs1(int x,int fa){
if(x==1)G[x]=0;
else{
G[x]=G[fa]+1;
if(son[fa][0]==x){
G[x]=max(G[x],dis[fa][1]+1);
}else{
G[x]=max(G[x],dis[fa][0]+1);
}
}
for(auto v:e[x]){
if(v==fa)continue;
dfs1(v,x);
}
}
int main(){
cin>>n;
for(int i=1;i<n;i++){
int x,y;
cin>>x>>y;
e[x].push_back(y);
e[y].push_back(x);
}
dfs(1,0);
dfs1(1,0);
for(int i=1;i<=n;i++){
cout<<max(f[i],G[i])<<" ";
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 1e4+5;
int n,f[N][3];
vector<int>e[N];
void dfs(int x,int fa){
f[x][0] = 1;
int sum = 0;
for(auto v:e[x]){
if(v==fa)continue;
dfs(v,x);
f[x][0] += f[v][2];
sum+=f[v][1];
f[x][2] += f[v][1];
}
f[x][1] = 1e9;
for(auto v:e[x]){
if(v==fa)continue;
f[x][1] = min(f[x][1],f[v][0]+sum-f[v][1]);
}
for(int i=1;i<=2;i++){
f[x][i] = min(f[x][i],f[x][i-1]);
}
}
int main(){
cin>>n;
for(int i=1;i<n;i++){
int x,y;
cin>>x>>y;
e[x].push_back(y);
e[y].push_back(x);
}
dfs(1,0);
cout<<f[1][1]<<endl;
return 0;
}