#include <bits/stdc++.h>
using namespace std;
template <typename T>
using Vec = std::vector<T>;
int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);
  std::cout.tie(nullptr);
  int n;
  cin >> n;
  Vec<Vec<int> > G(n, Vec<int>());
  for (int i = 0; i < n - 1; ++i) {
    int u, v;
    cin >> u >> v;
    --u, --v;
    G[u].push_back(v);
    G[v].push_back(u);
  }
  auto max_deg = 0;
  for (const auto& Gi : G) {
    max_deg = max(max_deg, int(Gi.size()));
  }
  Vec<std::pair<int, int> > path;
  function<void(int, int, int)> dfs = [&](int u, int p, int t) {
    path.emplace_back(u, t);
    int deg = G[u].size(), cur_time = t;
    for (auto v : G[u]) {
      if (v == p) continue;
      if (cur_time == max_deg) {
        cur_time = max(cur_time % max_deg, t - deg);
        path.emplace_back(u, cur_time);
      }
      dfs(v, u, ++cur_time);
      path.emplace_back(u, cur_time);
      --deg;
    }
    if (u != 0 && t - 1 < cur_time) {
      path.emplace_back(u, t - 1);
    }
  };
  dfs(0, -1, 0);
  cout << path.size() << '\n';
  for (auto [u, t] : path) {
    cout << u + 1 << ' ' << t << '\n';
  }
  return 0;
}
