#include <bits/stdc++.h>
long long ans;
int n, u, v, size[100005], max[100005], rt, match[100005], sz;
std::stack<int> G[100005];
std::vector<int> ch[100005];
std::priority_queue<std::pair<int, int> > q;
void dfs(int u, int f) {
  size[u] = 1;
  for (int v : ch[u]) {
    if (v == f) continue;
    dfs(v, u);
    size[u] += size[v];
    max[u] = std::max(max[u], size[v]);
  }
  max[u] = std::max(max[u], n - size[u]);
}
void col(int u, int f, int id) {
  G[id].push(u);
  for (int v : ch[u])
    if (v != f) col(v, u, id);
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i < n; ++i) {
    scanf("%d%d", &u, &v);
    ch[u].push_back(v);
    ch[v].push_back(u);
  }
  dfs(1, 0);
  for (int i = 1; i <= n; ++i)
    if (max[i] <= n / 2) rt = i;
  dfs(rt, 0);
  for (int i = 1; i <= n; ++i)
    if (i != rt) ans += size[i];
  for (int v : ch[rt]) {
    col(v, rt, ++sz);
    q.push(std::make_pair(G[sz].size(), sz));
  }
  if (n % 2 == 0) {
    G[++sz].push(rt);
    q.push(std::make_pair(G[sz].size(), sz));
  }
  while (!q.empty()) {
    std::pair<int, int> P1 = q.top();
    q.pop();
    std::pair<int, int> P2 = q.top();
    q.pop();
    int u = P1.second, v = P2.second;
    match[G[u].top()] = G[v].top();
    match[G[v].top()] = G[u].top();
    G[u].pop();
    G[v].pop();
    if (G[u].size()) q.push(std::make_pair(G[u].size(), u));
    if (G[v].size()) q.push(std::make_pair(G[v].size(), v));
  }
  if (n % 2) {
    int u = rt == 1 ? 2 : 1;
    int v = match[u];
    match[u] = rt;
    match[rt] = v;
    match[v] = u;
  }
  printf("%lld\n", ans * 2);
  for (int i = 1; i <= n; ++i) printf("%d ", match[i]);
  return 0;
}
