#include <bits/stdc++.h>
int max(int a, int b) { return a > b ? a : b; }
int *oj[100000], oo[100000];
void add(int i, int j) {
  int o = oo[i]++;
  if (o >= 2 && (o & o - 1) == 0)
    oj[i] = (int *)realloc(oj[i], o * 2 * sizeof *oj[i]);
  oj[i][o] = j;
}
int m;
int qu[100000 * 4], tt[100000 * 4], cnt;
void dfs(int p, int i, int t) {
  int o, wrap;
  qu[cnt] = i, tt[cnt] = t, cnt++;
  wrap = 0;
  for (o = 0; o < oo[i]; o++) {
    int j = oj[i][o];
    if (j != p) {
      if (t == m) {
        qu[cnt] = i, tt[cnt] = t -= oo[i], cnt++;
        wrap = 1;
      }
      dfs(i, j, ++t);
      qu[cnt] = i, tt[cnt] = t, cnt++;
    }
  }
  if (p != -1 && !wrap) qu[cnt] = i, tt[cnt] = t -= oo[i], cnt++;
}
int main() {
  int n, h, i, j;
  scanf("%d", &n);
  for (i = 0; i < n; i++) oj[i] = (int *)malloc(2 * sizeof *oj[i]);
  for (h = 0; h < n - 1; h++) {
    scanf("%d%d", &i, &j), i--, j--;
    add(i, j), add(j, i);
  }
  m = 0;
  for (i = 0; i < n; i++) m = max(m, oo[i]);
  dfs(-1, 0, 0);
  printf("%d\n", cnt);
  for (h = 0; h < cnt; h++) printf("%d %d\n", qu[h] + 1, tt[h]);
  return 0;
}
