#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
const int maxn = 1e5 + 5;
vector<int> g[maxn];
int n;
long long sz[maxn];
int ans[maxn];
long long sum = 0;
int cen;
vector<int> v;
void dfs(int now, int pre) {
  sz[now] = 1;
  long long mx = 0;
  for (auto &i : g[now]) {
    if (i ^ pre) {
      dfs(i, now);
      mx = max(mx, sz[i]);
      sum += min(sz[i], (n - sz[i])) * 2;
      sz[now] += sz[i];
    }
  }
  mx = max(mx, n - sz[now]);
  if (mx <= n / 2) {
    cen = now;
  }
}
void dfs2(int now, int pre) {
  v.push_back(now);
  for (auto &i : g[now]) {
    if (i ^ pre) {
      dfs2(i, now);
    }
  }
}
void go() {
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    int x, y;
    cin >> x >> y;
    g[x].push_back(y);
    g[y].push_back(x);
  }
  dfs(1, 0);
  cout << sum << '\n';
  dfs2(cen, 0);
  for (int i = 0; i < v.size(); i++) {
    ans[v[i]] = v[(i + n / 2) % n];
  }
  for (int i = 1; i < n + 1; i++) {
    cout << ans[i] << ' ';
  }
  cout << '\n';
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int c = 0;
  int t;
  if (!c) {
    t = 1;
  } else {
    cin >> t;
  }
  while (t--) {
    go();
  }
}
