#include <bits/stdc++.h>
using namespace std;
struct node {
  vector<int> to;
  int con = -1;
};
vector<node> graph;
int cost = 0;
void walk(int curr, int father) {
  vector<int> notCon, con;
  for (int& next : graph[curr].to) {
    if (next != father) {
      walk(next, curr);
      if (graph[next].con == -1)
        notCon.push_back(next);
      else
        con.push_back(next);
    }
  }
  if (notCon.size() > 0) {
    notCon.push_back(curr);
    int s = notCon.size();
    cost += 2 * s - 2;
    for (int i = 0; i < s; i++) {
      graph[notCon[i]].con = notCon[(i + 1) % s];
    }
  } else if (father == -1) {
    int child = con[0];
    graph[curr].con = graph[child].con;
    graph[child].con = curr;
    cost += 2;
  }
}
int main() {
  cin.sync_with_stdio(false);
  cin.tie(0);
  int n;
  cin >> n;
  graph.resize(n + 1);
  for (int i = 1; i < n; i++) {
    int a, b;
    cin >> a >> b;
    graph[a].to.push_back(b);
    graph[b].to.push_back(a);
  }
  walk(1, -1);
  cout << cost << "\n";
  for (int i = 1; i <= n; i++) cout << graph[i].con << " ";
  cout << endl;
}
