#include <bits/stdc++.h>
using namespace std;
const int MAXN = 400 + 10;
struct Graph {
  int id, next, b[MAXN];
} g[MAXN * 2];
int n, k, st[MAXN], f[MAXN][MAXN], size[MAXN];
void Add(int tot, int first, int second) {
  g[tot].id = second, g[tot].next = st[first], st[first] = tot;
}
void Tree_dp(int first, int fa) {
  size[first] = 1;
  f[first][1] = 0;
  for (int i = st[first]; i != -1; i = g[i].next)
    if (g[i].id != fa) {
      int second = g[i].id;
      Tree_dp(second, first);
      for (int j = size[first] + 1; j <= size[first] + size[second]; ++j)
        f[first][j] = MAXN;
      size[first] += size[second];
      for (int j = min(size[first], k); j >= 1; --j) {
        g[i].b[j] = 0, ++f[first][j];
        for (int k = 1; k <= min(size[second], j - 1); ++k)
          if (f[first][j - k] + f[second][k] < f[first][j])
            f[first][j] = f[first][j - k] + f[second][k], g[i].b[j] = k;
      }
    }
}
void DFS(int first, int k, int fa) {
  vector<int> s;
  for (int i = st[first]; i != -1; i = g[i].next)
    if (g[i].id != fa) s.push_back(i);
  reverse(s.begin(), s.end());
  for (int i = 0; i < (int)s.size(); ++i)
    if (!g[s[i]].b[k])
      printf("%d ", s[i] / 2);
    else
      DFS(g[s[i]].id, g[s[i]].b[k], first), k -= g[s[i]].b[k];
}
int main() {
  cin >> n >> k;
  if (n == k) puts("0"), exit(0);
  memset(st, -1, sizeof(st));
  for (int i = 1; i < n; ++i) {
    int first, second;
    cin >> first >> second;
    Add(i * 2, first, second);
    Add(i * 2 + 1, second, first);
  }
  int Tohka = MAXN, Mashiro = 0;
  if (k <= 10)
    for (int i = 1; i <= n; ++i) {
      Tree_dp(i, 0);
      if (f[i][k] < Tohka) Tohka = f[i][k], Mashiro = i;
    }
  else
    for (int i = 1; i <= n / k * 10; ++i) {
      int first = rand() % n + 1;
      Tree_dp(first, 0);
      if (f[first][k] < Tohka) Tohka = f[first][k], Mashiro = first;
    }
  cout << Tohka << endl;
  Tree_dp(Mashiro, 0);
  DFS(Mashiro, k, 0);
  fclose(stdin);
  fclose(stdout);
  return 0;
}
