#include #include #include #include using namespace std; const int MAX_N = 10002; struct node{ int a, b; node(){} node(int a_, int b_){ a = a_; b = b_; } }; int N; vector G[MAX_N]; node color[MAX_N]; int in[MAX_N]; int V[MAX_N]; int Q[MAX_N], h, t; int main(){ // freopen("input.txt","r",stdin); scanf("%d\n", &N); if(N == 2){ printf("1 2\n1 2\n"); exit(0); } for(int i = 1 ; i < N ; i ++){ int u,v; scanf("%d %d\n", &u, &v); G[u].push_back(v); in[v] ++; G[v].push_back(u); in[u] ++; } int root = -1; for(int i = 1 ; i <= N ; i ++){ if(in[i] >= 2){ root = i; break; } } h = t = 0; Q[h++] = root; V[root] = 1; color[root] = node(1,2); int p = 3; while(h > t){ int c = Q[t++]; int flag = 0; for(int i = 0 ; i < G[c].size() ; i ++){ int q = G[c][i]; if(V[q] == 0){ Q[h++] = q; V[q] = 1; if(flag%2 == 0) color[q] = node(color[c].b, p++); else color[q] = node(color[c].a, p++); flag ++; } } } for(int i = 1 ; i <= N ; i ++) printf("%d %d\n", color[i].a, color[i].b); return 0; }