#include <bits/stdc++.h>
/*
Chang ki si xuyen man dem
Di lac vao trong giac mong
*/
using namespace std;
using ll = long long;
#define int long long
#define pii pair<ll, ll>
#define fi first
#define se second
const ll N = 5e5 + 5, inf = 1e15, mod = 1e9 + 7, block = 320, lim = 19;
int n, k;
vector <pii> adj[N];
int maxx[N], minn[N];
int have[N];
int P[N];
void predfs(int u, int p) {
for (auto [v, w] : adj[u]) {
if (v != p) {
P[v] = w;
predfs(v, u);
}
}
}
vector <int> trace;
void dfs(int u, int par, int tg) {
int mx = 0, mi = inf;
for (auto [v, w] : adj[u]) {
if (v != par) {
dfs(v, u, tg);
if (have[v] == 1) { // dang dc cover boi node thuoc subtree
mi = min(mi, minn[v] + w);
}
else { // chua dc cover
mx = max(mx, maxx[v] + w);
}
}
}
if (mx + mi <= tg) {
have[u] = 1;
minn[u] = mi;
}
else if (mx + P[u] > tg || u == 1) {
have[u] = 1;
minn[u] = 0;
trace.push_back(u);
}
else {
have[u] = 2;
maxx[u] = mx;
}
}
bool check(int mid) {
trace.clear();
for (int i = 1; i <= n; i++) {
have[i] = 0;
minn[i] = inf;
maxx[i] = 0;
}
dfs(1, 0, mid);
if (trace.size() <= k) {
return 1;
}
return 0;
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
if (fopen(".inp", "r")) {
freopen(".inp", "r", stdin);
freopen(".out", "w", stdout);
}
cin >> n >> k;
for (int i = 1; i < n; i++) {
int u, v, w;
cin >> u >> v >> w;
adj[u].emplace_back(v, w);
adj[v].emplace_back(u, w);
}
predfs(1, 0);
// for (auto x : ord) cout << x << ' ';
int l = 0, r = inf, ans = 0;
while(l <= r) {
int mid = (l + r) / 2;
if (check(mid)) {
ans = mid;
r = mid - 1;
}
else {
l = mid + 1;
}
}
cout << ans << '\n';
check(ans);
// for (auto x : trace) cout << x << ' ';
vector <int> ok(n + 5, 0);
for (auto x : trace) {
cout << x << ' ';
ok[x] = 1;
k--;
}
// cout << k << '\n';
for (int i = 1; i <= n; i++) {
if (!ok[i] && k > 0) {
cout << i << ' ';
k--;
}
}
return 0;
}