#include <bits/stdc++.h>
using namespace std;
int n, cnt, x, y, mx, tot;
int head[200005], bin[200005], V[200005 * 5], T[200005 * 5];
struct pl {
  int v, nex;
} e[2 * 200005];
void add(int a, int b) {
  cnt++;
  e[cnt].v = b;
  e[cnt].nex = head[a];
  head[a] = cnt;
  bin[a]++;
}
void dfs(int a, int fa, int ti) {
  int fl = ti;
  V[++tot] = a;
  T[tot] = ti;
  if (ti == mx && a != 1) {
    ti -= bin[a];
    V[++tot] = a;
    T[tot] = ti;
  }
  int i = head[a];
  while (i != 0) {
    if (e[i].v != fa) {
      dfs(e[i].v, a, ti + 1);
      ti++;
      V[++tot] = a;
      T[tot] = ti;
      if (ti == mx && a != 1) {
        ti -= bin[a];
        V[++tot] = a;
        T[tot] = ti;
      }
    }
    i = e[i].nex;
  }
  if (ti != fl - 1 && a != 1) {
    ti = fl - 1;
    V[++tot] = a;
    T[tot] = ti;
  }
}
int main() {
  scanf("%d", &n);
  if (n == 1) {
    puts("1");
    puts("1 0");
    return 0;
  }
  for (int i = 1; i < n; i++) scanf("%d%d", &x, &y), add(x, y), add(y, x);
  for (int i = 1; i <= n; i++) mx = max(mx, bin[i]);
  dfs(1, 0, 0);
  printf("%d\n", tot);
  for (int i = 1; i <= tot; i++) printf("%d %d\n", V[i], T[i]);
  return 0;
}
