func_code_string: #include <bits/stdc++.h>   using namespace std;   using ll = long long;   using ull = unsigned long long;   using pii = pair<int, int>;   template <class T>   inline void read(T &x) {     x = 0;     char c = getchar();     bool flag = 0;     while (!isdigit(c)) {       if (c ==  - ) flag = 1;       c = getchar();     }     while (isdigit(c)) {       x = (x << 3) + (x << 1) + c -  0 ;       c = getchar();     }     x = flag ? -x : x;   }   template <class T>   inline void write(T x) {     if (x < 0) {       putchar( - );       x = -x;     }     if (x >= 10) write(x / 10);     putchar(x % 10 +  0 );   }   const int maxn = 5e5 + 10;   const int mod = 998244353;   struct Edge {     int next, ed;   };   Edge e[maxn * 2];   int head[maxn], cnt;   void addEdge(int st, int ed) {     e[cnt].ed = ed;     e[cnt].next = head[st];     head[st] = cnt++;   }   bool vis[maxn];   int sum[maxn], d[maxn];   int ansl[maxn], ansr[maxn];   void get(int k) {     sum[k] = 1;     for (int i = head[k]; i != -1; i = e[i].next) {       int ed = e[i].ed;       if (sum[ed] == 0) {         get(ed);         sum[k] += sum[ed];         ++d[k];       }     }   }   void dfs(int k, int l, int r) {     vis[k] = 1;     ansr[k] = l + d[k];     int c = l, temp = r;     for (int i = head[k]; i != -1; i = e[i].next) {       int ed = e[i].ed;       if (!vis[ed]) {         ansl[ed] = c;         ++c;         dfs(ed, temp - sum[ed] * 2 + 2, temp);         temp -= sum[ed] * 2 - 1;       }     }   }   int main() {     int n;     read(n);     memset(head, -1, sizeof(head));     for (int i = 1; i < n; ++i) {       int st, ed;       scanf( %d %d , &st, &ed);       addEdge(st, ed);       addEdge(ed, st);     }     get(1);     ansl[1] = 1;     dfs(1, 2, n * 2);     for (int i = 1; i <= n; ++i) {       printf( %d %d n , ansl[i], ansr[i]);     }   }   