#include <bits/stdc++.h>
using namespace std;
const int MAXN = (int)1e5 + 10;
int n, m, k;
int fa[MAXN];
int visit[MAXN];
vector<int> res;
struct node {
  int x, y, id;
  double w;
  node() {}
  node(int x_, int y_, double w_, int id_) {
    x = x_;
    y = y_;
    w = w_;
    id = id_;
  }
  friend bool operator<(const node &a, const node &b) { return a.w < b.w; }
};
vector<node> e1, e2;
int getfa(int x) {
  if (fa[x] == x) return x;
  return fa[x] = getfa(fa[x]);
}
int get_ans(double mid, int K = -1) {
  static node e[MAXN];
  for (int i = 0; i < e1.size(); i++) e1[i].w += mid;
  for (int i = 1; i <= n; i++) fa[i] = i;
  int cnt = 0;
  merge(e1.begin(), e1.end(), e2.begin(), e2.end(), e) - e;
  res.clear();
  for (int i = 0; i < m; i++) {
    if ((e[i].x == 1 || e[i].y == 1) && cnt == K) continue;
    int x = getfa(e[i].x), y = getfa(e[i].y);
    if (x != y) {
      res.push_back(e[i].id);
      if (e[i].x == 1 || e[i].y == 1) ++cnt;
      fa[x] = y;
    }
  }
  for (int i = 0; i < e1.size(); i++) e1[i].w -= mid;
  return cnt;
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= n; i++) fa[i] = i;
  int las = n;
  for (int i = 0; i < m; i++) {
    int u, v, w;
    scanf("%d%d%d", &u, &v, &w);
    if (u == 1 || v == 1)
      e1.push_back(node(u, v, (double)w, i + 1));
    else
      e2.push_back(node(u, v, (double)w, i + 1));
    if (getfa(u) != getfa(v)) {
      fa[getfa(u)] = getfa(v);
      las--;
    }
  }
  if (e1.size() < k || (las != 1)) {
    printf("-1\n");
    return 0;
  }
  sort(e1.begin(), e1.end());
  sort(e2.begin(), e2.end());
  double l = -1e6, r = 1e6, ans = -1;
  if (get_ans(l) < k || get_ans(r) > k) {
    printf("-1\n");
    return 0;
  }
  for (int i = 1; i < 50; i++) {
    int mid = (l + r) / 2.0;
    if (get_ans(mid) >= k) {
      ans = mid;
      l = mid;
    } else
      r = mid;
  }
  get_ans(ans, k);
  cout << res.size() << endl;
  for (int i = 0; i < res.size(); i++) printf("%d ", res[i]);
  printf("\n");
  return 0;
}
