#include <bits/stdc++.h>
const int N = 101010;
using namespace std;
int n;
vector<int> g[N];
int sz[N];
int cd1(int i) {
  sz[i] = 1;
  for (int j : g[i])
    if (!sz[j]) sz[i] += cd1(j);
  return sz[i];
}
int cd2(int i) {
  for (int j : g[i]) {
    if (sz[j] > sz[i] / 2) {
      sz[i] -= sz[j];
      sz[j] += sz[i];
      return cd2(j);
    }
  }
  return i;
}
int lvl[N];
vector<int> ord;
void dfs(int i) {
  ord.push_back(i);
  for (int j : g[i]) {
    if (!lvl[j]) {
      lvl[j] = lvl[i] + 1;
      dfs(j);
    }
  }
}
int main() {
  cin >> n;
  for (int i = 1; i < n; i++) {
    int a, b;
    cin >> a >> b;
    g[a].push_back(b);
    g[b].push_back(a);
  }
  cd1(1);
  int c = cd2(1);
  lvl[c] = 1;
  dfs(c);
  vector<int> nord, vans(n);
  for (int i = 0; i < n; i++) nord.push_back(ord[(i + n / 2) % n]);
  long long ans = 0;
  for (int i = 0; i < n; i++) ans += lvl[ord[i]] + lvl[nord[i]] - 2;
  for (int i = 0; i < n; i++) vans[ord[i] - 1] = nord[i];
  cout << ans << '\n';
  for (int i : vans) cout << i << ' ';
  cout << '\n';
  return 0;
}
