#pragma GCC optimize("O3")
#include<bits/stdc++.h>
#define ll long long
#define all(x) x.begin(), x.end()
#define file(name) freopen(name".inp","r",stdin);freopen(name".out","w",stdout);
using namespace std;
const int MOD = 1e9 + 7;
const int inf = 1e9 + 36;
const ll INF = 1e18 + 36;
const long double EPS = 1e-15;
const int N = 2e5 + 3667;
int minmize(int a, int b) {
return a < b ? a : b;
}
int maxmize(int a, int b) {
return a > b ? a : b;
}
ll Minmize(ll a, ll b) {
return a < b ? a : b;
}
ll Maxmize(ll a, ll b) {
return a > b ? a : b;
}
int n, k, parent[N];
vector<pair<int, int>>adj[N];
vector<int>order;
ll W;
bool visited[N];
void DFS(int u, int f) {
for (auto [v, w] : adj[u])
if (v != f) {
parent[v] = u;
DFS(v, u);
}
order.push_back(u);
}
pair<ll, vector<int>>check(ll R, bool flag) {
vector<ll>need(n + 1, 0), cover(n + 1, INF);
int cnt = 0;
vector<int>park;
for (int u : order) {
need[u] = 0;
cover[u] = INF;
for (auto [v, w] : adj[u])
if (v != parent[u]) {
if (need[v] != -1) {
if (need[v] + w > R) {
++cnt;
if (flag)
park.push_back(v);
cover[u] = Minmize(cover[u], w);
}
else
need[u] = Maxmize(need[u], need[v] + w);
}
if (cover[v] != INF) {
cover [u] = Minmize(cover[u], cover[v] + w);
}
}
if (need[u] != -1 && cover[u] != INF && need[u] + cover[u] <= R)
need[u] = -1;
}
if (need[1] != -1) {
++cnt;
if (flag)
park.push_back(1);
}
return {cnt, park};
}
int main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
//file("DHKA");
cin >> n >> k;
for (int i = 1; i < n; ++i) {
int u, v, w;
cin >> u >> v >> w;
adj[u].push_back({v, w});
adj[v].push_back({u, w});
W += w;
}
DFS(1, 0);
ll low = 0, high = W, ans = W;
while (low <= high) {
ll mid = (low + high) >> 1LL;
auto [cnt, park] = check(mid, false);
if (cnt <= k) {
ans = mid;
high = mid - 1;
}
else
low = mid + 1;
}
auto [cnt, park] = check(ans, true);
for (int u : park)
visited[u] = true;
for (int u = 1; u <= n && park.size() < k; ++u)
if (!visited[u])
park.push_back(u);
cout << ans << '\n';
for (int u : park)
cout << u << ' ';
return 0;
}