#include <bits/stdc++.h>
void Get(int &T) {
  char C;
  bool F = 0;
  for (; C = getchar(), C < '0' || C > '9';)
    if (C == '-') F = 1;
  for (T = C - '0'; C = getchar(), C >= '0' && C <= '9'; T = T * 10 + C - '0')
    ;
  F && (T = -T);
}
int U[100005];
int V[100005];
double W[100005];
double WOri[100005];
int Order[100005];
int N, M, K;
bool Cmp(int X, int Y) { return W[X] < W[Y]; }
void Init() {
  Get(N);
  Get(M);
  Get(K);
  for (int i = 1; i <= M; i++) {
    Get(U[i]);
    Get(V[i]);
    scanf("%lf", W + i);
    WOri[i] = W[i];
    Order[i] = i;
  }
}
int Fa[100005];
int GetFa(int X) {
  if (Fa[X] == X) return X;
  return Fa[X] = GetFa(Fa[X]);
}
int Check(double Delta, bool Output = 0) {
  for (int i = 1; i <= M; i++) {
    W[i] = WOri[i];
    if (U[i] == 1 || V[i] == 1) W[i] += Delta;
  }
  int Return = 0;
  for (int i = 1; i <= N; i++) Fa[i] = i;
  for (int i = 1; i <= M; i++) Order[i] = i;
  std::sort(Order + 1, Order + M + 1, Cmp);
  int Cnt = 0;
  for (int k = 1, i; k <= M; k++) {
    i = Order[k];
    if (GetFa(U[i]) == GetFa(V[i])) continue;
    Fa[GetFa(U[i])] = GetFa(V[i]);
    if (U[i] == 1 || V[i] == 1) Return++;
    if (Output) printf("%d ", i);
    Cnt++;
    if (Cnt >= N - 1) break;
  }
  if (Output) puts("");
  if (Cnt < N - 1) return -1;
  return Return;
}
double AnsMid;
void Work() {
  if (Check(-1e60) < K) {
    puts("-1");
    exit(0);
  }
  if (Check(1e60) > K) {
    puts("-1");
    exit(0);
  }
  double Mid;
  for (double L = -6000000000., R = 6000000000.;;) {
    Mid = L + R;
    Mid *= .5;
    int Deg = Check(Mid);
    if (Deg == -1) {
      puts("-1");
      exit(0);
    }
    if (Deg == K) break;
    if (Deg < K)
      R = Mid;
    else
      L = Mid;
  }
  AnsMid = Mid;
}
void Output() {
  printf("%d\n", N - 1);
  Check(AnsMid, 1);
}
int main() {
  Init();
  Work();
  Output();
  return 0;
}
