#include <bits/stdc++.h>
using namespace std;
const int Max_N = 100006;
int N;
vector<int> pomedzio_dydis[Max_N];
vector<int> briaunos[Max_N];
int dfs(int id, int tevas) {
  int tevo_id = -1;
  for (int i = 0; i < briaunos[id].size(); i++) {
    int kitas = briaunos[id][i];
    if (kitas == tevas) {
      tevo_id = pomedzio_dydis[id].size();
      pomedzio_dydis[id].push_back(-1);
      continue;
    }
    int vaiku = dfs(briaunos[id][i], id);
    vaiku++;
    pomedzio_dydis[id].push_back(vaiku);
  }
  int suma = 0;
  for (int i = 0; i < briaunos[id].size(); i++) {
    if (pomedzio_dydis[id][i] != -1) suma += pomedzio_dydis[id][i];
  }
  if (tevo_id != -1) pomedzio_dydis[id][tevo_id] = N - suma - 1;
  return suma;
}
vector<int> galinis;
int dist[Max_N];
void dfs1(int id, int tevas, int pagrindinis) {
  galinis.push_back(id);
  for (int i = 0; i < briaunos[id].size(); i++) {
    int kitas = briaunos[id][i];
    if (kitas == tevas) {
      continue;
    }
    dist[kitas] = dist[id] + 1;
    dfs1(briaunos[id][i], id, pagrindinis);
  }
};
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cin >> N;
  for (int i = 1; i < N; i++) {
    int a, b;
    cin >> a >> b;
    briaunos[a].push_back(b);
    briaunos[b].push_back(a);
  }
  dfs(1, 1);
  int centroidas = 1;
  while (true) {
    int didziausias = -1, didziausias_id = -1;
    for (int i = 0; i < pomedzio_dydis[centroidas].size(); i++) {
      if (pomedzio_dydis[centroidas][i] > didziausias) {
        didziausias_id = i;
        didziausias = pomedzio_dydis[centroidas][i];
      }
    }
    if (didziausias > N / 2)
      centroidas = briaunos[centroidas][didziausias_id];
    else
      break;
  }
  for (int i = 0; i <= N; i++) dist[i] = 1000000;
  dist[centroidas] = 0;
  dfs1(centroidas, centroidas, centroidas);
  vector<int> persuktas = galinis;
  rotate(persuktas.begin(), persuktas.begin() + N / 2, persuktas.end());
  int spausdinti[N + 1];
  for (int i = 0; i < N; i++) spausdinti[galinis[i]] = persuktas[i];
  long long ats = 0;
  for (int i = 0; i < N; i++) {
    ats += dist[galinis[i]] + dist[i + 1];
  }
  cout << ats << "\n";
  for (int i = 1; i <= N; i++) cout << spausdinti[i] << " ";
  return 0;
}
