#include<cstdio>
#include<vector>
#include<algorithm>
#include<cstring>
#define INF 1000000000
using namespace std;
vector<int>L[1010];
int n,k,m,i,j,a,b,p,u,mid,nr,v[1010],x[1010],sol[1010],y[1010];
FILE *f,*g;
int minim(int a,int b){
if(a<b)
return a;
return b;
}
int maxim(int a,int b){
if(a>b)
return a;
return b;
}
void dfs(int nod,int tata){
int vmin = INF;
v[i] = 1;
for(int i=0;i<L[nod].size();i++){
if( v[ L[nod][i] ] == 0 && L[nod][i] != tata ){
dfs( L[nod][i] , nod );
x[nod] = maxim( x[nod] , x[ L[nod][i] ] + 1 );
vmin = minim( vmin , x[ L[nod][i] ] + 1 );
}
}
if( x[nod] == a ){
y[ ++b ] = nod;
x[nod] = - a - 1;
return;
}
if( vmin < 0 && - vmin - 1 >= x[nod] ){
x[nod] = vmin;
}
}
int verif( int val ){
memset(y,0,sizeof(y));
a = val;
b = 0;
dfs(1,0);
if( x[1] >=0 )
y[ ++ b ] = 1;
return b<=k;
}
int main(){
f=fopen("salvare.in","r");
g=fopen("salvare.out","w");
fscanf(f,"%d%d",&n,&k);
for(i=1;i<=n;i++){
fscanf(f,"%d%d",&a,&b);
L[a].push_back(b);
L[b].push_back(a);
}
p=1;
u=n;
while( p <= u ){
mid = ( p + u ) / 2;
if( verif( mid ) ){
u = mid - 1;
memcpy(sol,y,sizeof(sol));
nr = mid;
}
else
p = mid + 1;
}
fprintf(g,"%d\n",nr);
sort(sol+1,sol+nr+1);
memset(v,0,sizeof(v));
for(i=1;i<=b;i++){
v[ sol[i] ] = 1;
}
k -= b;
for(i=1;i<=n;i++){
if( v[i] )
fprintf(g,"%d ",i);
else if( k > 0 ){
k--;
fprintf(g,"%d ",i);
}
}
fclose(f);
fclose(g);
return 0;
}