#include #include #include #include #include #include #include #include #include #include #include static const int MOD = 1000000007; using ll = long long; using u32 = uint32_t; using namespace std; template constexpr T INF = ::numeric_limits::max() / 32 * 15 + 208; int main() { int n; cin >> n; vector> G(n); for (int i = 0; i < n - 1; ++i) { int a, b; scanf("%d %d", &a, &b); a--; b--; G[a].emplace_back(b); G[b].emplace_back(a); } queue Q; vector dp(n, INF); for (int i = 0; i < n; ++i) { if(G[i].size() == 1 || i == 0){ dp[i] = 0; Q.emplace(i); } } while(!Q.empty()){ int i = Q.front(); Q.pop(); for (auto &&j : G[i]) { if(dp[j] > dp[i] + 1){ Q.emplace(j); dp[j] = dp[i] + 1; } } } for (int i = 0; i < n; ++i) { printf("%d\n", dp[i]); } return 0; }