#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define MAX 100002 int n; vector v[MAX]; bool use[MAX]; int ans[MAX]; int dep[MAX]; inline void dfs2(int a){ use[a] = true; dep[a] = INT_MAX; int countt = 0; for (int i = 0; i < v[a].size(); i++){ if (use[v[a][i]] == false){ dfs2(v[a][i]); dep[a] = min(dep[a], dep[v[a][i]] + 1); countt++; } } if (countt== 0){ dep[a] = 0; } return; } inline int dfs(int a, int b){ use[a] = false; ans[a] = INT_MAX; map s; s.clear(); int countt = 0; for (int i = 0; i < v[a].size(); i++){ if (use[v[a][i]] == false){ continue; } countt++; s[dep[v[a][i]]+1]++; } if (countt == 0){ ans[a] = 0; return 0; } s[b]++; map::iterator ite; ite = s.begin(); ans[a] = (*ite).first; for (int i = 0; i < v[a].size(); i++){ if (use[v[a][i]] == false){ continue; } int val = dep[v[a][i]]+1; s[val]--; if (s[val] == 0){ s.erase(val); } ite = s.begin(); dfs(v[a][i], (*ite).first+1); s[val]++; } } int main(){ scanf("%d", &n); for (int i = 1; i < n; i++){ int a, b; scanf("%d%d", &a, &b); a--; b--; v[a].push_back(b); v[b].push_back(a); } for (int i = 0; i < n; i++){ ans[i] = INT_MAX; } dfs2(0); dfs(0, 0); for (int i = 0; i < n; i++){ printf("%d\n", ans[i]); } return 0; }