#include <bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define pb push_back
#define pii pair<ll,ll>
#define ll long long
#define FOR(i,a,b) for( ll i = a ; i <= b ; i++ )
#define REP(i,a,b) for( ll i = a ; i >= b ; i-- )
const ll maxn = 200009;
ll n , k;
vector<pii> a[maxn];
ll need[maxn] , cover[maxn];
const ll INF = 1e18;
ll cnt;
bool park[maxn];
//void init(){
// cnt = 0;
// FOR(i,1,n){
// park[i] = 0;
// need[i] = 0;
// cover[i] = INF;
// }
//}
ll R;
void dfs( ll u , ll par ){
need[u] = 0;
cover[u] = INF;
for( auto [v,w] : a[u] ){
if( v == par ) continue;
dfs(v,u);
if( need[v] != -1 ){
if( need[v] + w > R ){
/// dat cong vien tai v
cnt++;
park[v] = 1;
cover[u] = min( cover[u] , 0LL+w );
}
else{
need[u] = max( need[u] , need[v] + w );
}
}
if( cover[v] != INF ){
cover[u] = min( cover[u] , cover[v] + w );
}
}
if( need[u] != -1 && cover[u] != INF && ( need[u] + cover[u] ) <= R )
need[u] = -1;
// cout << "w";
}
bool chec( ll mid ){
// init();
R = mid;
cnt = 0;
fill(park+1,park+1+n,0);
dfs(1,0);
if( need[1] != -1 ){
cnt++;
park[1] = 1;
}
if( cnt < k ){
int cur = 1;
int tim = k-cnt;
while(tim != 0){
if( park[cur] == 0 ){
park[cur] = 1;
tim--;
}
cur++;
}
}
return (cnt <= k);
}
signed main(){
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
// freopen( "name.inp" , "r" , stdin );
// freopen( "name.out" , "w" , stdout );
ll l = 0 , r = 0;
cin >> n >> k;
FOR(i,1,n-1){
ll u , v , w;
cin >> u >> v >> w;
a[u].pb({v,w});
a[v].pb({u,w});
r += w;
}
while( l < r ){
ll mid = (l+r)/2;
if( chec(mid) )
r = mid;
else l = mid+1;
}
chec(r);
vector<ll> ans;
FOR(i,1,n)
if( park[i] == 1 )
ans.pb(i);
cout << r << '\n';
FOR(i,0,(ll)ans.size()-1)
cout << ans[i] << " ";
// cout << ans[ans.size()-1];
return 0;
}