#include <bits/stdc++.h>
using ll = long long;
using namespace std;
const int MAXN = 100001;
ll dp[MAXN];
vector<pair<int,ll>> g[MAXN];
ll best = LONG_LONG_MAX/2;
vector<int> ans;
void dfs(int u, int p) {
for (auto [v,w] : g[u]) {
if (v == p) continue;
dfs(v, u);
dp[u] = max(dp[u], dp[v]+w);
}
}
void dfs2(int u, int p) {
ll o = dp[u]; int mx;
dp[u] = 0;
for (auto [v,w] : g[u]) {
if (dp[u] <= dp[v]+w) {
dp[u] = dp[v]+w;
mx = v;
}
}
for (auto [v,w] : g[u]) {
if (v == p) continue;
if (v == mx) {
ll o2 = dp[u];
dp[u] = 0;
for (auto [k,y] : g[u]) {
if (k != mx) dp[u] = max(dp[u], dp[k]+y);
}
dfs2(v, u);
dp[u] = o2;
} else {
dfs2(v, u);
}
}
if (dp[u] < best) {
best = dp[u];
ans.clear();
ans.push_back(u);
} else if (dp[u] == best) {
ans.push_back(u);
}
dp[u] = o;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
for (int i = 0; i < n - 1; i++) {
int a, b;
ll w;
cin >> a >> b >> w;
g[a].push_back({b,w});
g[b].push_back({a,w});
}
dfs(1, 0);
dfs2(1, 0);
sort(ans.begin(), ans.end());
cout << best << "\n" << ans.size() << "\n";
for (int i : ans) cout << i << " ";
}