#include <bits/stdc++.h>
using namespace std;
int sz[100010];
vector<int> adj[100010];
int ans[100010];
int n;
vector<int> h;
long long int mx;
void get_sz(int u, int p, bool w) {
  sz[u] = 1;
  if (w) h.push_back(u);
  for (auto v : adj[u]) {
    if (v == p) continue;
    get_sz(v, u, w);
    sz[u] += sz[v];
  }
  if (w) mx += (long long int)min(sz[u], n - sz[u]);
}
int centroid(int u, int p, int n) {
  for (auto v : adj[u]) {
    if (v == p) continue;
    if (sz[v] > n / 2) return centroid(v, u, n);
  }
  return u;
}
void start(int u, int p) {
  int i;
  get_sz(u, p, false);
  int c = centroid(u, p, sz[u]);
  get_sz(c, 0, true);
  for (i = 0; i < n; i++) {
    ans[h[i]] = h[(i + (n / 2)) % n];
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cout.tie(0);
  cin.tie(0);
  int i, j, k, a, b, c, x, y, z, m, t;
  cin >> n;
  ans[n] = n;
  for (i = 1; i < n; i++) {
    ans[i] = i;
    cin >> a >> b;
    adj[a].push_back(b);
    adj[b].push_back(a);
  }
  start(1, 0);
  cout << mx * 2 << "\n";
  for (i = 1; i < n + 1; i++) {
    if (i != 1) cout << " ";
    cout << ans[i];
  }
}
