#include <bits/stdc++.h>
using namespace std;
struct ss {
  long long next, to;
} e[100005 << 1];
struct node {
  long long sz, fa;
} h[100005 << 1];
long long n, cnt, tot, he, tail, t, sum, head[100005], cl[100005],
    q[100005 << 1], b[100005];
long long ans1, ans2, root, change1[100005], change2[100005], g[100005],
    siz[100005];
inline void add(long long x, long long y) {
  e[++cnt].next = head[x];
  e[cnt].to = y;
  head[x] = cnt;
}
inline void dfs1(long long now, long long fa) {
  long long k = now;
  siz[now] = 1;
  for (long long i = head[now]; i; i = e[i].next) {
    long long v = e[i].to;
    if (v == fa) continue;
    dfs1(v, now);
    ans2 += 2 * min(siz[v], n - siz[v]);
    if (g[v] != 0) {
      change1[k] = g[v];
      k = v;
      ans1 += 2;
    }
    siz[now] += siz[v];
  }
  change1[k] = now;
  if (change1[now] == now) g[now] = now;
  if (siz[now] > (n / 2) && root == 0) root = now;
}
void col(long long now, long long fa, long long color) {
  cl[now] = color;
  h[color].sz++;
  for (long long i = head[now]; i; i = e[i].next) {
    long long v = e[i].to;
    if (v == fa) continue;
    col(v, now, color);
  }
}
bool cmp(node a, node b) { return a.sz > b.sz; }
void dfs2(long long now, long long fa) {
  if (he <= tail) {
    change2[q[he]] = now;
    he++;
  }
  sum++;
  q[tail + sum] = now;
  for (long long i = head[now]; i; i = e[i].next) {
    long long v = e[i].to;
    if (v == fa) continue;
    dfs2(v, now);
  }
}
signed main() {
  cin >> n;
  for (long long i = 1; i < n; i++) {
    long long x, y;
    cin >> x >> y;
    add(x, y);
    add(y, x);
  }
  dfs1(1, 0);
  if (change1[1] == 1) {
    t = change1[e[head[1]].to];
    change1[e[head[1]].to] = 1;
    change1[1] = t;
    ans1 += 2;
  }
  cout << ans2, puts("");
  tot = 0;
  for (long long i = head[root]; i; i = e[i].next) {
    h[++tot].fa = e[i].to;
    col(e[i].to, root, tot);
  }
  sort(h + 1, h + 1 + tot, cmp);
  he = 1;
  tail = 0;
  for (long long i = 1; i <= tot; i++) {
    sum = 0;
    dfs2(h[i].fa, root);
    tail += sum;
  }
  change2[q[he]] = root;
  he++;
  tail++;
  q[tail] = root;
  dfs2(h[1].fa, root);
  for (long long i = 1; i <= n; i++) cout << change2[i] << " ";
}
