#include <bits/stdc++.h>
using namespace std;
const short maxN = 400 + 2;
short N, K;
struct node {
  short v;
  node *nxt;
};
node *G[maxN];
node E[maxN << 1];
short nE = 0;
inline void init() {
  nE = 0;
  memset(G, 0, sizeof(G));
}
inline void add(short u, short v) {
  E[nE].v = v, E[nE].nxt = G[u], G[u] = &E[nE++];
  E[nE].v = u, E[nE].nxt = G[v], G[v] = &E[nE++];
}
short idx[maxN][maxN];
short dp[maxN][maxN];
short rec[maxN][maxN][maxN];
short fat[maxN];
void dfs(int u, int pre) {
  fat[u] = pre;
  dp[u][1] = 0;
  for (node *e = G[u]; e; e = e->nxt) {
    if (e->v == pre) continue;
    dfs(e->v, u);
    for (short j = N; j >= 0; j--) {
      dp[u][j]++;
      rec[u][e->v][j] = 0;
      for (short k = 0; k <= j; k++) {
        if (dp[u][j] >= dp[u][j - k] + dp[e->v][k]) {
          dp[u][j] = dp[u][j - k] + dp[e->v][k];
          rec[u][e->v][j] = k;
        }
      }
    }
  }
}
vector<short> final;
void gao(short u, short pre, short t) {
  if (t == 0) return;
  vector<short> stk;
  for (node *e = G[u]; e; e = e->nxt) stk.push_back(e->v);
  for (short i = (short)stk.size() - 1; i >= 0; i--) {
    if (stk[i] == pre) continue;
    if (rec[u][stk[i]][t] == 0)
      final.push_back(idx[u][stk[i]]);
    else {
      gao(stk[i], u, rec[u][stk[i]][t]);
      t -= rec[u][stk[i]][t];
    }
  }
}
int main() {
  cin >> N >> K;
  if (N == 1) {
    cout << 0 << endl;
    return 0;
  }
  init();
  short u, v;
  for (short i = 1; i < N; i++) {
    cin >> u >> v;
    add(u, v);
    idx[u][v] = idx[v][u] = i;
  }
  memset(dp, 0x3f, sizeof(dp));
  dfs(1, -1);
  int res = dp[1][K], root = 1;
  for (short i = 2; i <= N; i++) {
    if (dp[i][K] + 1 < res) {
      res = dp[i][K] + 1;
      root = i;
    }
  }
  cout << res << endl;
  final.clear();
  if (root != 1) final.push_back(idx[root][fat[root]]);
  gao(root, fat[root], K);
  for (short i = 0; i < res; i++)
    if (i)
      cout << " " << final[i];
    else
      cout << final[i];
  cout << endl;
  return 0;
}
