#include <bits/stdc++.h>
using namespace std;
struct Edge {
  int u, v, id;
  double val;
  bool operator<(const Edge &b) const { return val < b.val; }
} E[110000], E2[110000];
int pa[5500], sel[110000];
int find(int u) { return pa[u] == u ? u : pa[u] = find(pa[u]); }
int kruskal(int n, int m, double offset) {
  memcpy(E2, E, m * sizeof(Edge));
  for (int i = 0; i < m; i++)
    if (E2[i].u == 0) E2[i].val += offset;
  sort(E2, E2 + m);
  for (int i = 0; i < n; i++) pa[i] = i;
  int ret = 0;
  for (int i = 0; i < m; i++) {
    int fu = find(E2[i].u);
    int fv = find(E2[i].v);
    if (fu == fv)
      sel[i] = 0;
    else {
      sel[i] = 1;
      if (E2[i].u == 0) ret++;
      pa[fu] = fv;
    }
  }
  return ret;
}
int main() {
  int n, m, k;
  while (scanf("%d %d %d", &n, &m, &k) != EOF) {
    for (int i = 0; i < m; i++) {
      int a, b;
      double c;
      scanf("%d %d %lf", &a, &b, &c);
      if (a > b) swap(a, b);
      a--;
      b--;
      E[i].u = a;
      E[i].v = b;
      E[i].val = c + 0.0000001 * i;
      E[i].id = i;
    }
    double l = -100000.0, r = 100000.0;
    int deg;
    for (int i = 0; i < 50; i++) {
      double mid = (l + r) / 2;
      deg = kruskal(n, m, mid);
      if (deg == k) break;
      if (deg > k)
        l = mid;
      else
        r = mid;
    }
    if (deg != k)
      puts("-1");
    else {
      printf("%d\n", n - 1);
      int f = 1;
      for (int i = 0; i < m; i++) {
        if (sel[i] == 0) continue;
        if (!f) putchar(' ');
        printf("%d", E2[i].id + 1);
        f = 0;
      }
      puts("");
    }
  }
}
