#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100010;
int n;
int curTime;
int sub[MAXN];
int perm[MAXN];
int depth[MAXN];
int nodeTime[MAXN];
int tin[MAXN], tout[MAXN];
vector<int> adj[MAXN];
vector<int> allSub[MAXN];
set<pair<int, int> > s;
int DFSInit(int cur, int p) {
  sub[cur] = 1;
  depth[cur] = depth[p] + 1;
  tin[cur] = ++curTime;
  nodeTime[curTime] = cur;
  for (int i = 0; i < (int)adj[cur].size(); i++)
    if (adj[cur][i] != p) sub[cur] += DFSInit(adj[cur][i], cur);
  tout[cur] = curTime;
  return sub[cur];
}
int findCentroid(int cur, int p, int s) {
  for (int i = 0; i < (int)adj[cur].size(); i++) {
    int viz = adj[cur][i];
    if (viz == p) continue;
    if (sub[viz] > s / 2) return findCentroid(viz, cur, s);
  }
  return cur;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i < n; i++) {
    int U, V;
    scanf("%d %d", &U, &V);
    adj[U].push_back(V);
    adj[V].push_back(U);
  }
  sub[1] = DFSInit(1, 1);
  int cent = findCentroid(1, 1, n);
  curTime = 0;
  depth[cent] = 0;
  sub[cent] = DFSInit(cent, cent);
  for (int i = 0; i < (int)adj[cent].size(); i++) {
    int viz = adj[cent][i];
    for (int j = tin[viz]; j <= tout[viz]; j++)
      allSub[i].push_back(nodeTime[j]);
    s.insert({-(tout[viz] - tin[viz] + 1), i});
  }
  while ((int)s.size() > 1) {
    int indA = s.begin()->second;
    s.erase(s.begin());
    int indB = s.begin()->second;
    s.erase(s.begin());
    int A = allSub[indA].back();
    allSub[indA].pop_back();
    int B = allSub[indB].back();
    allSub[indB].pop_back();
    perm[A] = B;
    perm[B] = A;
    if (!allSub[indA].empty()) s.insert({(int)-allSub[indA].size(), indA});
    if (!allSub[indB].empty()) s.insert({(int)-allSub[indB].size(), indB});
  }
  if (s.empty()) {
    int A = adj[cent][0];
    int B = perm[adj[cent][0]];
    perm[cent] = A;
    perm[A] = B;
    perm[B] = cent;
  } else {
    int indA = s.begin()->second;
    int A = allSub[indA].back();
    perm[A] = cent;
    perm[cent] = A;
  }
  long long int ans = 0;
  for (int i = 1; i <= n; i++) ans += depth[i] - 1;
  printf("%lld\n", 2 * ans);
  for (int i = 1; i <= n; i++) printf("%d ", perm[i]);
}
