#include <bits/stdc++.h>   using namespace std;   vector<int> E[3010];   int mark[3010];   int c, f;   bool find(int i, int p) {     if (mark[i] == 1) {       c = i;       f = 1;       return true;     }     mark[i] = 1;     for (vector<int>::iterator to = E[i].begin(); to < E[i].end(); to++) {       if (*to != p && find(*to, i)) {         if (f) mark[i] = 2;         if (i == c) f = 0;         return true;       }     }     return false;   }   int ans[3010];   void bfs(int i) {     queue<int> v;     v.push(i);     while (!v.empty()) {       int to = v.front();       v.pop();       for (vector<int>::iterator at = E[to].begin(); at < E[to].end(); at++) {         if (ans[*at] > ans[to] + 1) {           ans[*at] = ans[to] + 1;           v.push(*at);         }       }     }   }   int main() {     int n;     scanf( %d , &n);     for (int i = 0; i < n; i++) {       int a, b;       scanf( %d%d , &a, &b);       a--;       b--;       E[a].push_back(b);       E[b].push_back(a);     }     find(0, -1);     for (int i = 0; i < 3010; i++) ans[i] = 10000000;     for (int i = 0; i < n; i++)       if (mark[i] == 2) {         ans[i] = 0;         bfs(i);       }     for (int i = 0; i < n; i++) printf( %d  , ans[i]);     return 0;   }   