#include <bits/stdc++.h>
using namespace std;
vector<pair<double, pair<long long int, long long int> > > E;
vector<pair<double, pair<long long int, long long int> > > edge;
set<pair<long long int, long long int> > ans;
long long int pr[100005];
long long int find(long long int num) {
  if (pr[num] == num) return num;
  return pr[num] = find(pr[num]);
}
int main() {
  long long int n, m, k, a, b, cnt;
  double c, low = -10000.0, high = 10000.0;
  cin >> n >> m >> k;
  for (long long int i = 0; i < ((long long int)(m)); ++i) {
    cin >> a >> b >> c;
    a--;
    b--;
    edge.push_back(
        make_pair(0.000001 * i + c, make_pair(min(a, b), max(a, b))));
  }
  for (long long int stage = 0; stage < ((long long int)(100)); ++stage) {
    double mid = (low + high) / 2.0;
    if (stage + 1 == 100) mid = low;
    ans.clear();
    E.clear();
    cnt = 0;
    for (long long int i = 0;
         i < ((long long int)(((long long int)(edge).size()))); ++i)
      E.push_back(edge[i]);
    for (long long int i = 0;
         i < ((long long int)(((long long int)(edge).size()))); ++i)
      if (E[i].second.first == 0) E[i].first += mid;
    sort((E).begin(), (E).end());
    for (long long int i = 0; i < ((long long int)(100005)); ++i) pr[i] = i;
    for (long long int i = 0;
         i < ((long long int)(((long long int)(E).size()))); ++i)
      if (find(E[i].second.first) != find(E[i].second.second)) {
        pr[find(E[i].second.first)] = find(E[i].second.second);
        ans.insert(E[i].second);
        if (E[i].second.first == 0) cnt++;
      }
    if (cnt < k)
      high = mid;
    else
      low = mid;
  }
  if (cnt != k) {
    cout << -1 << endl;
    return 0;
  }
  cout << ((long long int)(ans).size()) << endl;
  for (long long int i = 0;
       i < ((long long int)(((long long int)(edge).size()))); ++i) {
    if (ans.find(edge[i].second) == ans.end()) continue;
    cout << i + 1 << " ";
  }
  cout << endl;
}
