#include <bits/stdc++.h>
using namespace std;
template <typename Arg1>
void __f(const char* name, Arg1&& arg1) {
  std::cerr << name << " : " << arg1 << endl;
}
template <typename Arg1, typename... Args>
void __f(const char* names, Arg1&& arg1, Args&&... args) {
  const char* comma = strchr(names + 1, ',');
  std::cerr.write(names, comma - names) << " : " << arg1 << " | ";
  __f(comma + 1, args...);
}
const long long hell = round(1e12);
vector<long long> ch;
vector<pair<long long, long long>> a;
long long calc_child(vector<vector<long long>>& v, long long cur,
                     long long par) {
  long long c = 0;
  for (auto x : v[cur]) {
    if (x == par) continue;
    c++;
    calc_child(v, x, cur);
  }
  ch[cur] = c;
  return 0;
}
long long make_seg(vector<vector<long long>>& v, long long cur, long long par,
                   long long st, long long en) {
  en = en + 1 + ch[cur];
  a[cur] = {st, en};
  long long i = 1;
  long long curen = en;
  for (auto x : v[cur]) {
    if (x == par) continue;
    en = make_seg(v, x, cur, curen - i, en);
    i++;
  }
  return en;
}
signed solve() {
  long long n;
  cin >> n;
  vector<vector<long long>> v(n + 1, vector<long long>(0));
  ch.resize(n + 1);
  a.resize(n + 1);
  for (long long i = 0; i < n - 1; i++) {
    long long a, b;
    cin >> a >> b;
    v[a].push_back(b);
    v[b].push_back(a);
  }
  calc_child(v, 1, 0);
  long long l = 1;
  long long en = l;
  make_seg(v, 1, 0, l, en);
  for (long long i = 1; i <= n; i++)
    cout << a[i].first << " " << a[i].second << endl;
  return 0;
}
signed main() {
  long long t = 1;
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  ;
  while (t--) {
    solve();
  }
  return 0;
}
