#include <bits/stdc++.h>
using namespace std;
const int maxn = 5e3 + 100, maxm = 1e5 + 100;
struct edge {
  int x, y, z, h, bh;
} e[maxm];
int n, m, fa[maxn], k, g[maxn];
bool cmp(edge x, edge y) { return x.z != y.z ? x.z < y.z : x.h < y.h; }
int find(int x) { return fa[x] == x ? x : (fa[x] = find(fa[x])); }
int check(int md) {
  for (int i = 1; i <= m; i++)
    if (e[i].h < 0) e[i].z -= md;
  for (int i = 1; i <= n; i++) fa[i] = i;
  sort(e + 1, e + m + 1, cmp);
  int cnt = 0, tot = 0;
  for (int i = 1; i <= m; i++) {
    int x = e[i].x, y = e[i].y, z = e[i].z;
    int fx = find(x), fy = find(y);
    if (fx == fy) continue;
    fa[fx] = fy;
    if (e[i].h < 0) cnt++;
  }
  for (int i = 1; i <= m; i++)
    if (e[i].h < 0) e[i].z += md;
  return cnt;
}
void calc(int md) {
  for (int i = 1; i <= m; i++)
    if (e[i].h < 0) e[i].z -= md;
  for (int i = 1; i <= n; i++) fa[i] = i;
  sort(e + 1, e + m + 1, cmp);
  int cnt = 0, tot = 0, siz = 0;
  for (int i = 1; i <= m; i++) {
    int x = e[i].x, y = e[i].y, z = e[i].z;
    int fx = find(x), fy = find(y);
    if (fx == fy) continue;
    if (e[i].h < 0 && cnt == k) continue;
    fa[fx] = fy;
    g[++tot] = e[i].bh;
    if (e[i].h < 0) cnt++;
    siz++;
  }
  if (siz != n - 1 || cnt < k) {
    printf("-1\n");
    exit(0);
  }
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= m; i++) {
    scanf("%d%d%d", &e[i].x, &e[i].y, &e[i].z);
    if (e[i].x == 1 || e[i].y == 1) e[i].h = -1;
    e[i].bh = i;
  }
  int l = -100001, r = 100002, mid, ans = l - 1;
  while (l < r) {
    mid = l + r >> 1;
    if (check(mid) >= k)
      r = mid, ans = mid;
    else
      l = mid + 1;
  }
  if (ans == -100002) {
    printf("-1\n");
    return 0;
  }
  calc(ans);
  printf("%d\n", n - 1);
  for (int i = 1; i < n; i++) printf("%d ", g[i]);
  printf("\n");
  return 0;
}
