#include <bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define pb push_back
#define pii pair<int,int>
#define ll long long
#define FOR(i,a,b) for( int i = a ; i <= b ; i++ )
#define REP(i,a,b) for( int i = a ; i >= b ; i-- )
const int maxn = 200009;
int n , k;
vector<pii> a[maxn];
ll need[maxn] , cover[maxn];
const ll INF = 1e18;
int 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( int u , int 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;
}
return (cnt <= k);
}
int 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){
int 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<int> ans;
FOR(i,1,n)
if( park[i] == 1 )
ans.pb(i);
cout << r << '\n';
FOR(i,0,(int)ans.size()-2)
cout << ans[i] << " ";
cout << ans[ans.size()-1];
return 0;
}