#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int n, rt, mxsiz = 1e9, cou;
int sz[N], bel[N], fat[N], sum[N];
long long dis[N], ans;
vector<int> g[N], v[N];
set<int> all, in[N];
set<pair<int, int> > lim;
void dfs(int x, int fa) {
  sz[x] = 1;
  int mx = 0;
  for (int i = 0; i < g[x].size(); i++) {
    int y = g[x][i];
    if (y == fa) continue;
    dfs(y, x);
    sz[x] += sz[y];
    mx = max(mx, sz[y]);
  }
  mx = max(mx, n - sz[x]);
  if (mxsiz > mx) mxsiz = mx, rt = x;
}
void dfs2(int x, int fa) {
  ans += dis[x];
  fat[x] = fa;
  for (int i = 0; i < g[x].size(); i++) {
    int y = g[x][i], z = v[x][i];
    if (y == fa) continue;
    dis[y] = dis[x] + z;
    dfs2(y, x);
  }
}
void solve(int x, int rot) {
  in[bel[x] = rot].insert(x);
  for (int i = 0; i < g[x].size(); i++) {
    int y = g[x][i];
    if (y == fat[x]) continue;
    solve(y, rot);
  }
}
void dolnk(int x, int y) {
  all.erase(y);
  if (bel[x]) {
    lim.erase(make_pair(sum[bel[x]], bel[x]));
    --sum[bel[x]];
    lim.insert(make_pair(sum[bel[x]], bel[x]));
  }
  if (bel[y]) {
    in[bel[y]].erase(y);
    if (in[bel[y]].size()) all.insert(*in[bel[y]].begin());
    lim.erase(make_pair(sum[bel[y]], bel[y]));
    --sum[bel[y]];
    lim.insert(make_pair(sum[bel[y]], bel[y]));
  }
}
int query(int x) {
  int ret = 0;
  if (lim.rbegin()->first == n - x + 1 && bel[lim.rbegin()->second] != bel[x]) {
    ret = *in[lim.rbegin()->second].begin();
  } else {
    set<int>::iterator it = all.begin();
    ret = (x == rt || bel[*all.begin()] != bel[x]) ? *it : *++it;
  }
  dolnk(x, ret);
  return ret;
}
int main() {
  cin >> n;
  for (int i = 1; i <= n - 1; i++) {
    int x, y, z;
    scanf("%d%d%d", &x, &y, &z);
    g[x].push_back(y), g[y].push_back(x);
    v[x].push_back(z), v[y].push_back(z);
  }
  dfs(1, 0);
  dfs2(rt, 0);
  printf("%lld\n", ans * 2);
  if (n == 1) return puts("1"), 0;
  all.insert(rt);
  for (int i = 0; i < g[rt].size(); i++) {
    int x = g[rt][i];
    solve(x, x);
    all.insert(*in[x].begin());
    lim.insert(make_pair(sum[x] = (int)in[x].size() * 2, x));
  }
  for (int i = 1; i <= n; i++) {
    printf("%d ", query(i));
  }
  puts("");
  return 0;
}
