#include <bits/stdc++.h>
using namespace std;
vector<vector<int64_t> > g;
vector<int64_t> v;
vector<int64_t> p, np;
void add(int64_t a, int64_t b) {
  p[a] = b;
  np[b] = a;
}
pair<int64_t, int64_t> func(int64_t cur = 1, int64_t head = 1,
                            int64_t rnd = 1) {
  queue<int64_t> q;
  v[cur] = rnd;
  pair<int64_t, int64_t> sol;
  sol.first = 1;
  sol.second = 0;
  rnd++;
  for (auto nei : g[cur]) {
    pair<int64_t, int64_t> tmp;
    if (v[nei] == 0) {
      tmp = func(nei, head, rnd);
      if (tmp.first == 1) {
        q.push(nei);
        sol.first++;
      }
      sol.second += tmp.second;
    }
  }
  int64_t a, b;
  if (sol.first == 1 && cur == head) {
    int64_t done = 1;
    for (auto nei : g[cur]) {
      for (auto nein : g[nei]) {
        if (done == 1 && p[nein] == nei) {
          p[nein] = cur;
          p[cur] = nei;
          done = 0;
        }
      }
    }
    sol.second += 2;
    return sol;
  }
  if (sol.first == 1) {
    return sol;
  }
  if (sol.first % 2 == 0) {
    a = q.front();
    q.pop();
    add(a, cur);
    add(cur, a);
    while (!q.empty()) {
      a = q.front();
      q.pop();
      b = q.front();
      q.pop();
      add(a, b);
      add(b, a);
    }
    sol.second += (sol.first - 2) * 2 + 2;
    sol.first = 0;
    return sol;
  } else {
    if (cur == head) {
      a = q.front();
      q.pop();
      b = q.front();
      q.pop();
      add(b, a);
      add(cur, b);
      add(a, cur);
      while (!q.empty()) {
        a = q.front();
        q.pop();
        b = q.front();
        q.pop();
        add(a, b);
        add(b, a);
      }
      sol.second += (sol.first - 3) * 2 + 4;
      sol.first = 0;
      return sol;
    } else {
      a = q.front();
      q.pop();
      b = q.front();
      q.pop();
      add(a, b);
      add(b, a);
      add(a, b);
      add(cur, a);
      add(b, cur);
      while (!q.empty()) {
        a = q.front();
        q.pop();
        b = q.front();
        q.pop();
        add(a, b);
        add(b, a);
      }
      sol.second += (sol.first - 3) * 2 + 4;
      sol.first = 0;
      return sol;
    }
  }
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  int64_t head = 2;
  int64_t n;
  cin >> n;
  g.resize(n + 1);
  for (int64_t i = 1; i < n; ++i) {
    int64_t A, B;
    cin >> A >> B;
    g[A].push_back(B);
    g[B].push_back(A);
  }
  v.resize(n + 1, 0);
  p.resize(n + 1, -1);
  np.resize(n + 1, -1);
  cout << func(head, head, 1).second << endl;
  for (int64_t i = 1; i < n + 1; ++i) {
    cout << p[i] << " ";
  }
  vector<int64_t> check;
  check.resize(n + 1, 0);
  return 0;
}
