#include <bits/stdc++.h>
using namespace std;
const int N = 3e6 + 10;
const long long MOD = 998244353;
vector<int> sg[N], g[N];
vector<pair<int, int> > zg;
int dp[N][2];
void dfs(int v, int par = -1) {
  int mx = INT_MIN;
  for (auto to : sg[v]) {
    if (to == par) continue;
    dfs(to, v);
    dp[v][1] += dp[to][0];
    mx = max(mx, dp[to][1] - dp[to][0]);
  }
  if (mx != INT_MIN) dp[v][0] = dp[v][1] + 1 + mx;
  dp[v][0] = max(dp[v][0], dp[v][1]);
}
void cons(int v, int par = -1, int tv = 0) {
  if (tv == 1 || dp[v][0] == dp[v][1]) {
    if (tv != 1) {
      g[sg[v][0]].push_back(v);
      g[v].push_back(sg[v][0]);
    }
    for (auto to : sg[v]) {
      if (to == par) continue;
      cons(to, v, 0);
    }
  } else {
    int mx = INT_MIN, mxi = -1;
    for (auto to : sg[v]) {
      if (to == par) continue;
      if (dp[to][1] - dp[to][0] > mx) {
        mx = dp[to][1] - dp[to][0];
        mxi = to;
      }
    }
    for (auto to : sg[v]) {
      if (to == par) continue;
      if (to != mxi) {
        cons(to, v, 0);
      } else {
        cons(to, v, 1);
        g[to].push_back(v);
        g[v].push_back(to);
        zg.push_back({to, v});
      }
    }
  }
}
int ans[N];
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  ;
  int n;
  cin >> n;
  for (int i = 0; i < (n - 1); ++i) {
    int a, b;
    cin >> a >> b;
    sg[a].push_back(b);
    sg[b].push_back(a);
  }
  dfs(1);
  cons(1);
  cout << 2 * (n - zg.size()) << endl;
  for (auto to : zg) {
    int a = to.first, b = to.second;
    if (g[a].size() < g[b].size()) swap(a, b);
    ans[a] = a;
    for (int i = 0; i < (g[a].size()); ++i) {
      if (i == 0)
        ans[g[a][0]] = g[a].back();
      else
        ans[g[a][i]] = g[a][i - 1];
    }
    swap(ans[a], ans[g[a][0]]);
  }
  for (int i = (1); i <= (n); ++i) cout << ans[i] << " ";
  return 0;
}
