#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> g, allas, allas2;
vector<bool> volt;
int t[(int)1e5][2] = {}, top[(int)1e5][2] = {};
int sor[(int)1e5];
void Bejar(int akt) {
  volt[akt] = true;
  t[akt][0] = (int)1e6;
  t[akt][1] = 0;
  top[akt][0] = top[akt][1] = akt;
  allas[akt].resize(g[akt].size());
  allas2[akt].resize(g[akt].size());
  int y = 0;
  for (int x : g[akt]) {
    if (!volt[x]) {
      Bejar(x);
      int newX = t[akt][0] + t[x][0];
      allas[akt][y] = 0;
      if (newX > t[akt][1] + t[x][1] + 2) {
        newX = t[akt][1] + t[x][1] + 2;
        allas[akt][y] = 3;
      }
      int newY = t[akt][1] + t[x][0];
      allas2[akt][y] = 2;
      if (newY > t[akt][0] + t[x][1] + 2) {
        newY = t[akt][0] + t[x][1] + 2;
        allas2[akt][y] = 1;
      }
      if (newY > newX) {
        newY = newX;
        allas2[akt][y] = allas[akt][y];
      }
      t[akt][0] = newX;
      t[akt][1] = newY;
    }
    y++;
  }
  return;
}
void Kiir(int akt, int c) {
  volt[akt] = true;
  reverse(g[akt].begin(), g[akt].end());
  reverse(allas[akt].begin(), allas[akt].end());
  reverse(allas2[akt].begin(), allas2[akt].end());
  vector<int> start(g[akt].size());
  for (int i = 0; i < g[akt].size(); i++) {
    if (volt[g[akt][i]]) continue;
    if (c == 0) {
      if (allas[akt][i] == 3) {
        swap(sor[akt], sor[g[akt][i]]);
        c = 1;
        start[i] = 1;
      } else
        start[i] = 0;
    } else {
      if (allas2[akt][i] == 1) {
        c = 0;
        swap(sor[akt], sor[g[akt][i]]);
        start[i] = 1;
      } else if (allas2[akt][i] == 2)
        start[i] = 0;
      else if (allas2[akt][i] == 3) {
        swap(sor[akt], sor[g[akt][i]]);
        start[i] = 1;
      }
      if (allas2[akt][i] == 0) {
        c = 0;
        start[i] = 0;
      }
    }
  }
  for (int i = (int)g[akt].size() - 1; i >= 0; i--)
    if (!volt[g[akt][i]]) Kiir(g[akt][i], start[i]);
  return;
}
int tav[10][10];
bool Check(vector<int> &v) {
  for (int i = 0; i < v.size(); i++)
    if (i == v[i]) return false;
  return true;
}
int Ertek(vector<int> &v) {
  int ret = 0;
  for (int i = 0; i < v.size(); i++) ret += tav[i][v[i]];
  return ret;
}
void Init(int n) {
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++)
      for (int k = 0; k < n; k++)
        if (j != k) tav[j][k] = min(tav[j][k], tav[j][i] + tav[i][k]);
  return;
}
void BruteForce(int n) {
  vector<int> v(n);
  for (int i = 0; i < n; i++) v[i] = i;
  vector<int> ki = v;
  int meg = 1e6;
  do {
    if (!Check(v)) continue;
    int akt = Ertek(v);
    if (akt < meg) {
      meg = akt;
      ki = v;
    }
  } while (next_permutation(v.begin(), v.end()));
  cout << meg << "\n";
  for (int i = 0; i < n; i++) cout << ki[i] + 1 << " ";
  cout << "\n";
  return;
}
int main() {
  cin.sync_with_stdio(false);
  cin.tie(0);
  int n;
  cin >> n;
  g.resize(n);
  allas.resize(n);
  allas2.resize(n);
  volt.resize(n, false);
  for (int i = 0; i < n - 1; i++) {
    int a, b;
    cin >> a >> b;
    g[a - 1].push_back(b - 1);
    g[b - 1].push_back(a - 1);
  }
  for (int i = 0; i < n; i++) sor[i] = i;
  Bejar(0);
  volt.assign(n, false);
  Kiir(0, 0);
  vector<int> ki(n);
  for (int i = 0; i < n; i++) ki[sor[i]] = i;
  cout << t[0][0] << "\n";
  for (int i = 0; i < n; i++) cout << ki[i] + 1 << " ";
  cout << "\n";
  return 0;
}
