#include <bits/stdc++.h>
using namespace std;
class Edge {
 public:
  int u;
  int v;
  double w;
  int i;
  Edge(int _u, int _v, double _w, int _i) {
    u = _u;
    v = _v;
    w = _w;
    i = _i;
  }
  bool operator<(Edge a) const { return w < a.w; }
};
class DisjointSets {
 public:
  vector<int> r;
  vector<int> rank;
  DisjointSets(int n) {
    r.resize(n);
    rank.resize(n);
    for (int i = 0; i < n; i++) {
      r[i] = i;
      rank[i] = 0;
    }
  }
  int find(int x) {
    if (r[x] != x) r[x] = find(r[x]);
    return r[x];
  }
  void link(int x, int y) {
    if (rank[x] > rank[y])
      r[y] = x;
    else {
      r[x] = y;
      if (rank[x] == rank[y]) rank[y] = rank[x] + 1;
    }
  }
  void unite(int x, int y) { link(find(x), find(y)); }
};
int main(int argc, char* argv[]) {
  int n, m, k;
  cin >> n >> m >> k;
  if (k == 0) {
    cout << (n == 1 ? 0 : -1) << endl;
    return 0;
  }
  vector<Edge> e, e0, e1;
  for (int u, v, w, i = 0; i < m; i++) {
    cin >> u >> v >> w;
    if (u > v) swap(u, v);
    u--;
    v--;
    if (u == 0)
      e0.push_back(Edge(u, v, w, i + 1));
    else
      e1.push_back(Edge(u, v, w, i + 1));
  }
  if (k > e0.size()) {
    cout << -1 << endl;
    return 0;
  }
  double l = -1000000000, r = 1000000000, x;
  for (int step = 0; step < 120; step++) {
    x = (l + r) / 2;
    e = e1;
    for (int j = 0; j < e0.size(); j++)
      e.push_back(Edge(e0[j].u, e0[j].v, e0[j].w + x, e0[j].i));
    int c = 0;
    DisjointSets d(n);
    sort(e.begin(), e.end());
    vector<Edge> mst;
    for (int j = 0; j < e.size(); j++)
      if (d.find(e[j].u) != d.find(e[j].v)) {
        d.unite(e[j].u, e[j].v);
        mst.push_back(e[j]);
        c += e[j].u == 0;
      }
    if (mst.size() != n - 1) {
      cout << -1 << endl;
      return 0;
    }
    if (c < k) r = x;
    if (c > k) l = x;
    if (c == k) {
      cout << n - 1 << endl;
      for (int j = 0; j < n - 1; j++) cout << mst[j].i << " ";
      cout << endl;
      return 0;
    }
  }
  cout << -1 << endl;
  return 0;
}
