#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
int n, sz[N], f[N], fa[N], go[N];
vector<int> G[N], S[N];
long long ans;
void dfs(int k1, int k2) {
  fa[k1] = k2, sz[k1] = 1;
  for (auto j : G[k1])
    if (j != k2) {
      dfs(j, k1);
      sz[k1] += sz[j];
    }
  if (k2) {
    ans += 2LL * min(sz[k1], (n - sz[k1]));
  }
}
void get(int k1, int k2, int k3) {
  S[k3].push_back(k1);
  for (auto j : G[k1])
    if (j != k2) get(j, k1, k3);
}
struct cmp {
  bool operator()(const int& k1, const int& k2) const {
    return ((int)(S[k1]).size()) != ((int)(S[k2]).size())
               ? ((int)(S[k1]).size()) > ((int)(S[k2]).size())
               : k1 < k2;
  }
};
set<int, cmp> st;
void ae(int k1, int k2) { go[k1] = k2, go[k2] = k1; }
void sol(int k1) {
  for (auto j : G[k1]) {
    get(j, k1, j), st.insert(j);
  }
  S[k1].push_back(k1), st.insert(k1);
  int tmp = -1;
  while (((int)(st).size())) {
    if (((int)(st).size()) == 1) {
      int k1 = *st.begin();
      if (((int)(S[k1]).size()) == 1) {
        go[go[tmp]] = S[k1].back(), go[S[k1].back()] = tmp;
        return;
      }
      int u = tmp = S[k1].back();
      S[k1].pop_back();
      int v = S[k1].back();
      S[k1].pop_back();
      ae(u, v);
      if (((int)(S[k1]).size()) == 0) exit(0);
      continue;
    }
    int k1 = *st.begin();
    int k2 = *++st.begin();
    st.erase(k1), st.erase(k2);
    ae(tmp = S[k1].back(), S[k2].back());
    S[k1].pop_back(), S[k2].pop_back();
    if (((int)(S[k1]).size())) st.insert(k1);
    if (((int)(S[k2]).size())) st.insert(k2);
  }
}
int main() {
  scanf("%d", &n);
  for (int i = (1); i <= (n - 1); ++i) {
    int k1, k2;
    scanf("%d%d", &k1, &k2);
    G[k1].push_back(k2), G[k2].push_back(k1);
  }
  int rt = 1;
  dfs(rt, 0);
  int id = 1;
  for (int i = (1); i <= (n); ++i) {
    f[i] = 0;
    for (auto j : G[i])
      if (j != fa[i]) f[i] = max(f[i], sz[j]);
    f[i] = max(f[i], sz[rt] - sz[i]);
    if (f[i] < f[id]) {
      id = i;
    }
  }
  rt = id;
  sol(id);
  printf("%lld\n", ans);
  for (int i = (1); i <= (n); ++i) printf("%d ", go[i]);
  return 0;
}
