#include <bits/stdc++.h>
using namespace std;
struct edge {
  int u, v, d;
  double w;
} e[100010], ee[100010];
double l, r, mid;
int n, m, k, p, f[5010], ans[5010];
bool cmp(edge a, edge b) { return a.w < b.w; }
int find(int x) {
  if (f[x] != x) f[x] = find(f[x]);
  return f[x];
}
int kruskal() {
  memcpy(ee, e, sizeof(e));
  for (int i = 1; i <= m; ++i)
    if (ee[i].u == 1) ee[i].w += mid;
  for (int i = 1; i <= n; ++i) f[i] = i;
  int res = 0;
  sort(ee + 1, ee + m + 1, cmp);
  for (int i = 1, cnt = 0; cnt < n - 1 && i <= m; ++i) {
    int x = find(ee[i].u), y = find(ee[i].v);
    if (x != y) {
      if (ee[i].u == 1) ++res;
      f[x] = y;
      ans[++cnt] = ee[i].d;
    }
  }
  return res;
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= m; ++i) {
    scanf("%d%d%lf", &e[i].u, &e[i].v, &e[i].w);
    e[i].w += 1e-6 * i;
    if (e[i].u > e[i].v) swap(e[i].u, e[i].v);
    e[i].d = i;
  }
  l = -1e6;
  r = 1e6;
  for (int i = 1; i <= 64; ++i) {
    mid = (l + r) / 2;
    p = kruskal();
    if (p < k)
      r = mid;
    else if (p > k)
      l = mid;
    else
      break;
  }
  if (p != k)
    printf("-1\n");
  else {
    printf("%d\n", n - 1);
    for (int i = 1; i < n; ++i) printf("%d ", ans[i]);
  }
  return 0;
}
