#include <bits/stdc++.h>
using namespace std;
int n, x, y;
vector<int> out, full;
vector<vector<int> > adjl;
vector<vector<bool> > uO;
vector<vector<bool> > uF;
void arSw(bool o, int aa, int bb) {
  if (o) {
    int c = out[aa];
    int d = out[bb];
    out[bb] = c;
    out[aa] = d;
  } else {
    int c = full[aa];
    int d = full[bb];
    full[bb] = c;
    full[aa] = d;
  }
}
void traverse(int cur, int parent, bool o) {
  if (adjl[cur].size() == 1 and parent != -1) return;
  for (int i = 0; i < adjl[cur].size(); i++) {
    if (adjl[cur][i] == parent) continue;
    bool toU = uF[cur][i];
    if (o) toU = uO[cur][i];
    traverse(adjl[cur][i], cur, toU);
    if (toU) arSw(false, cur, adjl[cur][i]);
  }
}
pair<int, int> dp(int cur, int parent) {
  int curO = 0;
  int curF = 0;
  int minO = INT_MAX;
  int minOF = -1;
  int minN = -1;
  int minE = -1;
  if (adjl[cur].size() == 1 and parent != -1) return make_pair(INT_MAX / 2, 0);
  bool hasS = false;
  for (int i = 0; i < adjl[cur].size(); i++) {
    int cN = adjl[cur][i];
    if (cN == parent) continue;
    pair<int, int> sol = dp(cN, cur);
    int sO = sol.second;
    int sF = sol.first;
    if (minO > sO) {
      minO = sO;
      minOF = sF;
      minN = cN;
      minE = i;
    }
    if (sO + 2 <= sF) {
      uO[cur][i] = true;
      uF[cur][i] = true;
      hasS = true;
      curO += sO + 2;
      curF += sO + 2;
    } else {
      curO += sF;
      curF += sF;
    }
  }
  if (!hasS) {
    uF[cur][minE] = true;
    curF -= minOF;
    curF += minO + 2;
  }
  return make_pair(curF, curO);
}
int main() {
  cin >> n;
  adjl = vector<vector<int> >(n, vector<int>());
  uO = vector<vector<bool> >(n, vector<bool>());
  uF = vector<vector<bool> >(n, vector<bool>());
  for (int i = 0; i < n - 1; i++) {
    cin >> x >> y;
    x -= 1;
    y -= 1;
    adjl[x].push_back(y);
    adjl[y].push_back(x);
    uO[x].push_back(false);
    uF[x].push_back(false);
    uO[y].push_back(false);
    uF[y].push_back(false);
    full.push_back(i);
    out.push_back(i);
  }
  full.push_back(n - 1);
  out.push_back(n - 1);
  pair<int, int> sol = dp(0, -1);
  cout << sol.first << endl;
  traverse(0, -1, false);
  for (int i = 0; i < n; i++) {
    cout << full[i] + 1 << " ";
  }
  cout << endl;
}
