#include <bits/stdc++.h>
using namespace std;
const long long maxn = 401;
long long n, m, a[maxn], dp[maxn][maxn], Size[maxn], k;
long long par[maxn];
long long PreCal[maxn], trace[maxn][maxn];
vector<long long> vt[maxn];
long long u, v;
long long Edge[maxn][maxn];
bool d2[maxn];
void DFS(long long u, long long p) {
  par[u] = p;
  bool isLeaf = true;
  for (auto v : vt[u]) {
    if (v != p) {
      isLeaf = false;
      DFS(v, u);
      for (long long i = k; i >= 2; i--) {
        for (long long j = 1; j < i; j++) {
          if (dp[u][i] > dp[u][j] + dp[v][i - j] - 2) {
            dp[u][i] = dp[u][j] + dp[v][i - j] - 2;
            trace[v][i] = i - j;
          }
        }
      }
    }
  }
}
void Trace(long long u, long long num) {
  d2[u] = true;
  for (auto i = vt[u].rbegin(); i < vt[u].rend(); i++) {
    long long v = *i;
    if (v == par[u]) continue;
    if (trace[v][num] != 0) {
      Trace(v, trace[v][num]);
      num -= trace[v][num];
    }
  }
}
int32_t main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  fill_n(&dp[0][0], maxn * maxn, INT_MAX);
  cin >> n >> k;
  for (long long i = 1; i < n; i++) {
    cin >> u >> v;
    vt[u].push_back(v);
    vt[v].push_back(u);
    Edge[u][v] = i;
    Edge[v][u] = i;
  }
  for (long long i = 1; i <= n; i++) dp[i][1] = vt[i].size();
  DFS(1, 1);
  long long Max = INT_MAX, idMax;
  for (long long i = 1; i <= n; i++) {
    if (Max > dp[i][k]) Max = dp[i][k], idMax = i;
  }
  cout << Max << '\n';
  Trace(idMax, k);
  for (long long i = 1; i <= n; i++) {
    if (d2[i]) {
      for (auto j : vt[i]) {
        if (!d2[j]) cout << Edge[i][j] << ' ';
      }
    }
  }
}
