#include <stdio.h>
#include <string.h>
#define MAXN 1000
int list[MAXN+1], lista[MAXN], urm[2*MAXN-1], m, k, next[MAXN+1], val[2*MAXN-1], r[MAXN+1], ok[MAXN+1], s[MAXN+1], n, t[MAXN+1];
void DFS(int nod, int h, int restrictie){
int p=list[nod];
ok[p]=1;
if(h>0){
while(p){
if(val[p]!=restrictie){
DFS(val[p], h-1, nod);
}
p=urm[p];
}
}
}
inline int resq(int h){
int ans, e, p, x, i, last;
memset(s, 0, sizeof s);
memset(ok, 0, sizeof ok);
ans=0;
for(e=n-1; e>=0; e--){
p=lista[e];
while(p){
if(!ok[r[p]]){
x=r[p];
last=x;
i=0;
while((i<h)&&(!s[x])&&(x>1)){
i++;
ok[x]=1;
last=x;
x=t[x];
}
if(!s[x]){
ok[x]=1;
s[x]=1;
DFS(x, h, last);
ans++;
}
}
p=next[p];
}
}
return ans;
}
void dfs(int nod, int h){
int p=list[nod];
r[++k]=nod;
next[k]=lista[h];
lista[h]=k;
while(p){
if(val[p]!=t[nod]){
t[val[p]]=nod;
dfs(val[p], h+1);
}
p=urm[p];
}
}
inline void adauga(int x, int y){
val[++m]=y;
urm[m]=list[x];
list[x]=m;
}
int main(){
int k, x, y, rez, pas, i;
FILE *fin, *fout;
fin=fopen("salvare.in", "r");
fout=fopen("salvare.out", "w");
fscanf(fin, "%d%d", &n, &k);
for(i=1; i<n; i++){
fscanf(fin, "%d%d", &x, &y);
adauga(x, y);
adauga(y, x);
}
t[1]=0;
dfs(1, 0);
rez=-1;
for(pas=1<<9; pas; pas>>=1){
if(resq(rez+pas)>k){
rez+=pas;
}
}
rez++;
fprintf(fout, "%d\n", rez);
x=resq(rez);
for(i=1; i<=n; i++){
k-=s[i];
}
for(i=1; i<=n; i++){
if((!s[i])&&(k)){
s[i]=1;
k--;
}
if(s[i]){
fprintf(fout, "%d ", i);
}
}
fclose(fin);
fclose(fout);
return 0;
}