#include <bits/stdc++.h>
using namespace std;
vector<int> p;
vector<pair<double, pair<int, pair<int, int> > > > g, helper;
vector<pair<int, pair<int, int> > > res;
int n, m, k, t;
int dsu_get(int v) { return (v == p[v]) ? v : (p[v] = dsu_get(p[v])); }
void dsu_unite(int a, int b) {
  a = dsu_get(a);
  b = dsu_get(b);
  if (rand() & 1) swap(a, b);
  if (a != b) p[a] = b;
}
int work(double delta) {
  res.clear();
  helper.clear();
  int degree = 0;
  long long cost = 0;
  p.resize(n);
  for (int i = 0; i < n; ++i) p[i] = i;
  for (int i = 0; i < g.size(); i++) {
    pair<double, pair<int, pair<int, int> > > temp;
    temp = g[i];
    if (g[i].second.second.first == 0 || g[i].second.second.second == 0)
      temp.first += delta;
    helper.push_back(temp);
  }
  sort(helper.begin(), helper.end());
  int a, b, l;
  for (int i = 0; i < helper.size(); i++) {
    a = helper[i].second.second.first;
    b = helper[i].second.second.second;
    l = helper[i].first;
    if (dsu_get(a) != dsu_get(b)) {
      if (a == 0 || b == 0) degree++;
      res.push_back(helper[i].second);
      dsu_unite(a, b);
    }
  }
  return degree;
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  g.resize(m);
  for (int i = 0; i < m; i++) {
    int a, b;
    double w;
    scanf("%d%d%lf", &a, &b, &w);
    g[i].first = w;
    g[i].second.second.first = a - 1;
    g[i].second.second.second = b - 1;
    g[i].second.first = i;
  }
  double left = -100000;
  double rigth = 100000;
  double mid;
  int degree;
  for (int q = 0; q < 1000; q++) {
    mid = (left + rigth) / 2;
    degree = work(mid);
    if (degree == k) break;
    if (degree > k) left = mid;
    if (degree < k) rigth = mid;
  }
  if (degree != k) {
    printf("%d", -1);
    return 0;
  }
  printf("%d\n", res.size());
  for (int i = 0; i < res.size(); i++) printf("%d ", res[i].first + 1);
  return 0;
}
