#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
int n;
vector<int> ms[maxn];
int sz[maxn];
int precompute(int x, int prosl) {
  sz[x] = 1;
  for (int i = 0; i < ms[x].size(); i++) {
    if (ms[x][i] != prosl) {
      sz[x] += precompute(ms[x][i], x);
    }
  }
  return sz[x];
}
int dfs(int x, int prosl) {
  for (int i = 0; i < ms[x].size(); i++) {
    if (ms[x][i] != prosl && sz[ms[x][i]] > n / 2) {
      return dfs(ms[x][i], x);
    }
  }
  return x;
}
bitset<maxn> bio;
vector<int> svi[maxn];
int centroid;
int sol[maxn];
void rijesi(int x, int prosl, int pos) {
  svi[pos].push_back(x);
  for (int i = 0; i < ms[x].size(); i++) {
    if (ms[x][i] != prosl) {
      rijesi(ms[x][i], x, pos);
    }
  }
}
bool cmp(pair<int, int> a, pair<int, int> b) { return a.first > b.first; }
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  int a, b;
  for (int i = 0; i < n - 1; i++) {
    cin >> a >> b;
    a--;
    b--;
    ms[a].push_back(b);
    ms[b].push_back(a);
  }
  precompute(0, 0);
  centroid = dfs(0, 0);
  precompute(centroid, centroid);
  long long res = 0;
  for (int i = 0; i < n; i++) {
    if (i != centroid) {
      res += sz[i] * 2;
    }
  }
  vector<pair<int, int> > obilazak;
  int vel = ms[centroid].size();
  for (int i = 0; i < vel; i++) {
    obilazak.push_back({sz[ms[centroid][i]], ms[centroid][i]});
  }
  sort(obilazak.begin(), obilazak.end(), cmp);
  for (int i = 0; i < vel; i++) {
    rijesi(obilazak[i].second, centroid, i);
  }
  int na = 1, br = 0;
  int kraj = -1;
  for (int i = 0; i < vel; i++) {
    for (int j = 0; j < svi[i].size(); j++) {
      if (!i && !j) {
        sol[svi[i][j]] = centroid;
        continue;
      }
      if (na == i) {
        kraj = svi[na][br];
        br = 0;
        na++;
        if (na == vel) {
          na = 0;
        }
      }
      sol[svi[i][j]] = svi[na][br];
      br++;
      if (br == svi[na].size()) {
        br = 0;
        na++;
        if (na == vel) {
          na = 0;
        }
      }
    }
  }
  if (na == vel) {
    br = 0;
    na = 0;
  }
  if (kraj == -1) {
    sol[centroid] = svi[na][br];
  } else {
    sol[centroid] = kraj;
  }
  cout << res << '\n';
  for (int i = 0; i < n; i++) {
    assert(sol[i] != i);
    cout << sol[i] + 1 << " ";
  }
  cout << '\n';
  return 0;
}
