#include <bits/stdc++.h>
using namespace std;
typedef struct edges {
  int u;
  int v;
  double w;
  int id;
} edges;
bool operator<(edges a, edges b) { return a.w < b.w; }
int n, m, k;
edges e[100005];
edges e1[100005];
int res[5005];
int fa[5005];
int sz;
int fndf(int x) {
  if (fa[x] == x) return x;
  return fa[x] = fndf(fa[x]);
}
int solve(double x) {
  for (int i = 1; i <= m; i++) {
    e1[i] = e[i];
    if (e1[i].u == 1 || e1[i].v == 1) e1[i].w += x;
  }
  sort(e1 + 1, e1 + m + 1);
  for (int i = 1; i <= n; i++) fa[i] = i;
  int tot = 0;
  sz = 0;
  for (int i = 1; i <= m; i++) {
    int x = fndf(e1[i].u), y = fndf(e1[i].v);
    if (x == y) continue;
    fa[x] = y;
    if (e1[i].u == 1 || e1[i].v == 1) tot++;
    res[++sz] = e1[i].id;
  }
  return tot;
}
int main() {
  cin >> n >> m >> k;
  for (int i = 1; i <= m; i++) {
    cin >> e[i].u >> e[i].v >> e[i].w;
    e[i].id = i;
  }
  double l = -1000000.0, r = 10000000.0;
  for (int i = 1; i <= 100; i++) {
    double mid = (l + r) / 2;
    int tot = solve(mid);
    if (tot == k) {
      cout << sz << endl;
      for (int i = 1; i <= sz; i++) cout << res[i] << " ";
      return 0;
    } else if (tot < k)
      r = mid;
    else
      l = mid;
  }
  cout << -1 << endl;
  return 0;
}
