#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5100;
const int MAXM = 110000;
int n, m, deg;
int fa[MAXN];
struct Edg {
  int a, b, id;
  double w;
  bool operator<(const Edg &o) const { return w < o.w; }
} edg[MAXM], tmp[MAXM];
int find(int x) { return fa[x] == x ? x : fa[x] = find(fa[x]); }
vector<int> ans;
int mst(double val) {
  for (int i = 1; i <= n; ++i) fa[i] = i;
  for (int i = 0; i < m; ++i) {
    tmp[i] = edg[i];
    if (tmp[i].a == 1) tmp[i].w += val;
  }
  ans.clear();
  sort(tmp, tmp + m);
  int cnt(0);
  for (int i = 0; i < m; ++i) {
    int a = find(tmp[i].a);
    int b = find(tmp[i].b);
    if (a != b) {
      ans.push_back(tmp[i].id);
      fa[a] = b;
      if (tmp[i].a == 1) ++cnt;
    }
  }
  return cnt;
}
void solve() {
  double l(-200000.0), r(200000.0), res(-1);
  double eps(0);
  int t(100), flag(0);
  while (t--) {
    double mid = (l + r) / 2.0;
    int now = mst(mid);
    if (now >= deg) {
      res = mid;
      l = mid + eps;
      flag = 1;
    } else
      r = mid - eps, flag = 0;
    if (now == deg) {
      res = mid;
      break;
    }
  }
  int k = mst(res);
  if (k != deg) {
    puts("-1");
  } else {
    sort(ans.begin(), ans.end());
    printf("%d\n", n - 1);
    for (int i = 0; i < n - 1; ++i) {
      printf("%d%c", ans[i], i == n - 2 ? '\n' : ' ');
    }
  }
}
void readin() {
  for (int i = 0; i < m; ++i) {
    scanf("%d%d%lf", &edg[i].a, &edg[i].b, &edg[i].w);
    if (edg[i].a > edg[i].b) swap(edg[i].a, edg[i].b);
    edg[i].id = i + 1;
  }
}
int main() {
  while (~scanf("%d%d%d", &n, &m, &deg)) {
    readin();
    solve();
  }
  return 0;
}
