#include <bits/stdc++.h>
using namespace std;
const int N = 5e3 + 3, M = 1e5 + 3;
const double eps = 1e-7;
int n, m, k, u[M], v[M], id[M];
double w[M];
bool vis[M];
struct dsu {
  int fa[N];
  inline void init(int range) {
    for (register int i = (1); i <= (range); ++i) fa[i] = i;
  }
  int Fnd(int u) { return fa[u] == u ? u : fa[u] = Fnd(fa[u]); }
} D;
inline bool cmp(int A, int B) { return w[A] < w[B]; }
int res, tmp;
inline int chk(double mid) {
  for (register int i = (1); i <= (m); ++i) id[i] = i, vis[i] = 0;
  for (register int i = (1); i <= (m); ++i)
    if (u[i] == 1 || v[i] == 1) w[i] += mid;
  sort(id + 1, id + m + 1, cmp);
  D.init(n);
  res = 0, tmp = 0;
  double val = 0;
  for (register int i = (1); i <= (m); ++i) {
    int Fu = D.Fnd(u[id[i]]), Fv = D.Fnd(v[id[i]]);
    if (Fu == Fv) continue;
    D.fa[Fu] = Fv;
    vis[id[i]] = 1;
    tmp++;
    if (u[id[i]] == 1 || v[id[i]] == 1) {
      res++;
    }
    if (tmp == n - 1) break;
  }
  for (register int i = (1); i <= (m); ++i)
    if (u[i] == 1 || v[i] == 1) w[i] -= mid;
  return res;
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  if (k == 0) {
    if (n > 1)
      puts("-1");
    else
      puts("0");
    return 0;
  }
  for (register int i = (1); i <= (m); ++i) {
    static int ___;
    scanf("%d%d%d", u + i, v + i, &___);
    w[i] = (double)___ + eps * 1.0 * i;
  }
  double L = -1e7, R = 1e7, mid;
  while (L + eps < R) {
    mid = (L + R) / 2;
    if (chk(mid) > k)
      L = mid;
    else
      R = mid;
  }
  if (chk(L) != k) chk(R);
  printf("%d\n", n - 1);
  for (register int i = (1); i <= (m); ++i)
    if (vis[i]) printf("%d ", i);
  return 0;
}
