#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 template inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; } template inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; } //constexpr long long MAX = 5100000; constexpr long long INF = 1LL << 60; constexpr int inf = 1000000007; constexpr long long mod = 1000000007LL; //constexpr long long mod = 998244353LL; const long double PI = acos((long double)(-1)); using namespace std; typedef unsigned long long ull; typedef long long ll; typedef long double ld; int n; vector> g; vector s; void dfs(int cur, int pre) { bool leaf = true; for (auto nxt : g[cur]) { if (nxt == pre) continue; leaf = false; dfs(nxt, cur); } if (leaf) s.emplace_back(cur); } vector MultiBFS(vector &s, vector>& g) { queue q; vector d(g.size(), inf); for (int i = 0; i < s.size(); i++) d[s[i]] = 0, q.emplace(s[i]); while (!q.empty()) { int cur = q.front(); q.pop(); for (auto nxt : g[cur]) { if (chmin(d[nxt], d[cur] + 1)) q.emplace(nxt); } } return d; } int main() { /* cin.tie(nullptr); ios::sync_with_stdio(false); */ scanf("%d", &n); g.resize(n); for (int i = 0; i < n - 1; i++) { int u, v; scanf("%d %d", &u, &v); u--; v--; g[u].emplace_back(v); g[v].emplace_back(u); } dfs(0, -1); s.emplace_back(0); auto d = MultiBFS(s, g); for (int i = 0; i < n; i++) { printf("%d\n", d[i]); } return 0; }