#include <bits/stdc++.h>
using namespace std;
const int MAXN = 401;
struct edge {
  int v, nxt;
  edge(int v_ = 0, int nxt_ = 0) {
    v = v_;
    nxt = nxt_;
  }
} e[MAXN];
int n, k, u, v, f[MAXN][MAXN], f_[MAXN], pre[MAXN][MAXN][MAXN], head[MAXN],
    num_of_edge, m[MAXN][MAXN], root;
vector<int> a[MAXN];
void add_edge(int u, int v) {
  a[u].emplace_back(v);
  a[v].emplace_back(u);
}
void dfs(int u, int fa) {
  memset(f[u], 0x3f, sizeof(f[u]));
  f[u][1] = 0;
  for (int v : a[u]) {
    if (v == fa) continue;
    dfs(v, u);
    memset(f_, 0x3f, sizeof(f_));
    for (int i = 1; i <= k; i++) {
      for (int j = 0; j + i <= k; j++) {
        if (f_[i + j] > f[u][i] + f[v][j]) {
          f_[i + j] = f[u][i] + f[v][j];
          pre[u][i + j][v] = j;
        }
      }
    }
    for (int i = 0; i <= k; i++) f[u][i] = f_[i];
  }
  f[u][0] = 1;
}
void rebuild(int u, int k, int fa) {
  reverse(a[u].begin(), a[u].end());
  for (int v : a[u]) {
    if (v == fa) continue;
    if (pre[u][k][v])
      rebuild(v, pre[u][k][v], u);
    else
      printf("%d ", m[u][v]);
    k = k - pre[u][k][v];
  }
}
int main() {
  memset(head, -1, sizeof(head));
  scanf("%d%d", &n, &k);
  for (int i = 1; i <= n - 1; i++) {
    scanf("%d%d", &u, &v);
    add_edge(u, v);
    m[u][v] = i;
    m[v][u] = i;
  }
  dfs(1, 0);
  root = 1;
  for (int i = 2; i <= n; i++) {
    f[i][k]++;
    if (f[i][k] < f[root][k]) root = i;
  }
  printf("%d\n", f[root][k]);
  rebuild(root, k, -1);
}
