#include <bits/stdc++.h>
using namespace std;
const int N = 410;
int dp[N][N], dp1[N][N], n, k, dad_edge[N];
vector<pair<int, int> > v[N];
void norm(int x, int d) {
  for (size_t i = 0; i < v[x].size(); ++i) {
    if (v[x][i].first == d) {
      swap(v[x][i], v[x].back());
      v[x].pop_back();
    }
    if (v[x][i].first != d) {
      norm(v[x][i].first, x);
      dad_edge[v[x][i].first] = v[x][i].second;
    }
  }
}
short edges[N][N][N];
void solve(int x) {
  int sz = int(v[x].size());
  for (int i = 1; i <= sz; ++i) {
    int y = v[x][i - 1].first;
    solve(y);
  }
  memset(dp1, 0x3f, sizeof(dp1));
  dp1[0][1] = sz;
  for (int i = 1; i <= sz; ++i) {
    int y = v[x][i - 1].first;
    dp1[i][1] = sz;
    for (int j = 2; j <= k; ++j) {
      dp1[i][j] = dp1[i - 1][j];
      for (int p = 1; j - p > 0; ++p) {
        if (dp1[i - 1][j - p] + dp[y][p] - 1 < dp1[i][j]) {
          dp1[i][j] = dp1[i - 1][j - p] + dp[y][p] - 1;
          edges[x][j][i] = p;
        }
      }
    }
  }
  memcpy(dp[x], dp1[sz], sizeof(dp[x]));
}
vector<int> ans;
void build(int x, int k) {
  int sz = int(v[x].size());
  for (int i = sz; i > 0; --i) {
    int y = v[x][i - 1].first;
    int z = v[x][i - 1].second;
    if (edges[x][k][i])
      build(y, edges[x][k][i]);
    else
      ans.push_back(z);
    k -= edges[x][k][i];
  }
}
int rez;
int main() {
  ios::sync_with_stdio(0);
  cin >> n >> k;
  for (int i = 1, x, y; i < n; ++i) {
    cin >> x >> y;
    v[x].push_back(make_pair(y, i));
    v[y].push_back(make_pair(x, i));
  }
  norm(1, 0);
  solve(1);
  int rez = 1 << 30;
  for (int i = 1; i <= n; ++i) rez = min(rez, dp[i][k] + (i != 1));
  for (int i = 1; i <= n; ++i)
    if (dp[i][k] + (i != 1) == rez) {
      build(i, k);
      cout << dp[i][k] + (i != 1) << '\n';
      if (i != 1) ans.push_back(dad_edge[i]);
      sort(ans.begin(), ans.end());
      for (size_t i = 0; i < ans.size(); ++i) cout << ans[i] << ' ';
      cout << '\n';
      break;
    }
}
