#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
#define NMAX 1010
#define ff first
#define ss second
#define MP make_pair
int N, K;
vector <int> leg[NMAX];
pair<int, int> a[NMAX];
char viz[NMAX];
int tata[NMAX];
int sol[NMAX];
void get_dist(int x, int niv)
{
a[x] = MP(niv, x);
viz[x] = 1;
for (vector <int> :: iterator it = leg[x].begin(); it != leg[x].end(); ++it)
if (!viz[*it]) {
tata[*it] = x;
get_dist(*it, niv + 1);
}
}
char vz[NMAX];
void baga(int x, int niv, int dist)
{
if (niv == dist + 1) return;
vz[x] = viz[x] = 1;
for (vector <int> :: iterator it = leg[x].begin(); it != leg[x].end(); ++it)
if (!vz[*it]) baga(*it, niv + 1, dist);
}
int get_nr(int dist)
{
memset(viz, 0, sizeof(viz));
int i, cur, j;
sol[0] = 0;
for (i = 1; i <= N; i++) {
cur = a[i].ss;
if (viz[cur]) continue;
// merg in sus dist
for (j = 1; j <= dist; j++) cur = tata[cur];
sol[++sol[0]] = cur;
memset(vz, 0, sizeof(vz));
baga(cur, 0, dist);
}
return sol[0];
}
int cmp(pair<int, int> a, pair<int, int> b)
{
return a.ff > b.ff;
}
int gen(int N, int K)
{
freopen("salvare.in", "w", stdout);
printf("%d\n%d\n", N, K);
int i;
for (i = 2; i <= N; i++) {
printf("%d %d\n", rand() % (i-1) + 1, i);
}
fclose(stdout);
return 0;
}
int nod[NMAX];
int coada[NMAX];
int dist[NMAX];
int get_jeg()
{
int p = 0, q = -1, i, x;
memset(viz, 0, sizeof(viz));
for (i = 1; i <= K; i++) coada[++q] = nod[i], dist[ nod[i] ] = 0, viz[ nod[i] ] = 1;
int mx = 0;
while (p <= q) {
x = coada[p];
p++;
for (vector <int> :: iterator it = leg[x].begin(); it != leg[x].end(); ++it)
if (!viz[*it]) {
coada[++q] = *it;
viz[*it] = 1;
dist[*it] = dist[x] + 1;
if (dist[*it] > mx) mx = dist[*it];
}
}
return mx;
}
int ss = NMAX;
void get_brute(int k, int last)
{
if (k == K + 1) {
int q = get_jeg();
if (q < ss) ss = q;
/* if (q == 3) {
for (int j = 1; j <= K; j++) printf("%d ", nod[j]);
printf("\n");
}
*/
return;
}
int i;
for (i = last + 1; i <= N; i++) {
nod[k] = i;
get_brute(k + 1, i);
}
}
int main()
{
// srand(14234);
// gen(1000, 30);
int i, x, y, q;
freopen("salvare.in", "r", stdin);
freopen("salvare.out", "w", stdout);
scanf("%d %d", &N, &K);
for (i = 1; i < N; i++) {
scanf("%d %d", &x, &y);
leg[x].push_back(y);
leg[y].push_back(x);
}
tata[1] = 1;
get_dist(1, 0);
sort(a + 1, a + N + 1, cmp);
// for (i = 1; i <= N; i++) printf("%d %d | ", a[i].ff, a[i].ss);
int step;
for (step = 1; step <= a[1].first; step <<= 1);
int rez = 0;
for (; step; step >>= 1) {
q = get_nr(rez + step);
if (q > K) rez += step;
}
// printf("%d\n", get_nr(1));
printf("%d\n", rez + 1);
// get_brute(1, 0);
// printf("%d\n", ss);
get_nr(rez + 1);
memset(viz, 0, sizeof(viz));
for (i = 1; i <= sol[0]; i++) viz[ sol[i] ] = 1;
for (i = 1; i <= N && sol[0] < K; i++)
if (!viz[i]) sol[ ++sol[0] ] = i;
sort(sol + 1, sol + sol[0] + 1);
for (i = 1; i <= sol[0]; i++) printf("%d ", sol[i]);
printf("\n");
/* printf("------\n");
get_nr(3);
printf("%d\n", sol[0]);
for (i = 1; i <= sol[0]; i++) printf("%d ", sol[i]);
printf("\n");
*/
fclose(stdin);
fclose(stdout);
return 0;
}