#include <bits/stdc++.h>
using namespace std;
struct edge {
  long long x, y, id;
  long double w;
  edge(long long a, long long b, long double weight, long long i)
      : x{a}, y{b}, w{weight}, id{i} {}
  edge() {}
  bool operator<(edge e) const { return w < e.w; }
};
class DSU {
 private:
  long long n;
  vector<long long> links;
  vector<long long> size;

 public:
  DSU(long long n) {
    links = vector<long long>(n + 1);
    size = vector<long long>(n + 1, 1);
    for (long long i = 1; i <= n; i++) links[i] = i;
  }
  long long find(long long x) {
    if (links[x] == x) return x;
    return links[x] = find(links[x]);
  }
  bool same(long long a, long long b) { return find(a) == find(b); }
  void unite(long long a, long long b) {
    a = links[a];
    b = links[b];
    if (size[b] > size[a]) swap(a, b);
    links[b] = a;
    size[a] += size[b];
  }
};
pair<long long, vector<long long>> degCalc(long double shift,
                                           vector<edge> &edgeList,
                                           long long n) {
  vector<edge> thisList;
  for (auto e : edgeList) {
    if (e.x == 1 || e.y == 1)
      thisList.push_back(edge(e.x, e.y, e.w + shift, e.id));
    else
      thisList.push_back(edge(e.x, e.y, e.w, e.id));
  }
  sort(thisList.begin(), thisList.end());
  vector<long long> numberList;
  long long deg = 0;
  DSU d(n);
  for (auto e : thisList) {
    if (!d.same(e.x, e.y)) {
      d.unite(e.x, e.y);
      if (e.x == 1 || e.y == 1) deg++;
      numberList.push_back(e.id);
    }
  }
  return {deg, numberList};
}
int main() {
  long long n, m, k, x, y;
  long double w;
  cin >> n >> m >> k;
  vector<edge> edgeList;
  for (long long i = 1; i <= m; i++) {
    cin >> x >> y >> w;
    edgeList.push_back(edge(x, y, w, i));
  }
  long double left = -1000000, right = 1000000, mid;
  long long deg;
  vector<long long> finalEdges;
  bool possible = false;
  for (long long i = 0; i <= 100; i++) {
    mid = (left + right) / 2;
    tie(deg, finalEdges) = degCalc(mid, edgeList, n);
    if (deg > k)
      left = mid;
    else if (deg < k)
      right = mid;
    else {
      possible = true;
      break;
    }
  }
  if (possible) {
    cout << finalEdges.size() << "\n";
    for (auto i : finalEdges) cout << i << " ";
    cout << "\n";
  } else
    cout << -1 << "\n";
}
