#include <bits/stdc++.h>
using namespace std;
int n, m, k, x[100100], y[100100], w[100100], p[100100], f[5500];
int cnt, ans[5500], inx;
double l, r, mid;
bool inline cmp(int i, int j) {
  return (x[i] == 1) * mid + w[i] < (x[j] == 1) * mid + w[j];
}
int findroot(int x) { return f[x] = (f[x] == x ? f[x] : findroot(f[x])); }
void work(bool flag) {
  cnt = inx = 0;
  for (int i = 1; i <= n; i++) f[i] = i;
  sort(p + 1, p + m + 1, cmp);
  for (int i = 1; i <= m; i++) {
    int j = p[i];
    int u = findroot(x[j]), v = findroot(y[j]);
    if (u != v && (cnt + (x[j] == 1) <= k || flag)) {
      f[u] = v;
      ans[inx++] = j;
      if (x[j] == 1) cnt++;
    }
  }
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  int tot = 0;
  for (int i = 1; i <= m; i++) {
    scanf("%d%d%d", x + i, y + i, w + i);
    p[i] = i;
    if (x[i] > y[i]) swap(x[i], y[i]);
    if (x[i] == 1) tot++;
  }
  if (tot < k || (n > 1 && k == 0)) {
    puts("-1");
    return 0;
  }
  mid = 0;
  work(1);
  if (inx + 1 < n) {
    puts("-1");
    return 0;
  }
  l = -1e5, r = 1e5;
  while (l + 1e-5 < r && cnt != k) {
    mid = (l + r) / 2;
    work(1);
    if (cnt < k)
      r = mid;
    else
      l = mid;
  }
  if (cnt != k) mid = (l + r) / 2;
  work(0);
  printf("%d\n", inx);
  for (int i = 0; i < inx - 1; i++) printf("%d ", ans[i]);
  if (inx) printf("%d\n", ans[inx - 1]);
}
