#include <bits/stdc++.h>   using namespace std;   const int inf(1010101010);   struct uf {     int par[5005], rank[5005];     int ff(int x) { return par[x] == x ? x : par[x] = ff(par[x]); }     void uu(int x, int y) {       x = ff(x), y = ff(y);       if (x == y) return;       if (rank[x] > rank[y])         par[y] = x;       else if (rank[x] < rank[y])         par[x] = y;       else         rank[x]++, par[y] = x;     }     uf(int n) {       for (int i(0); i < (n); i++) par[i] = i, rank[i] = 0;     }   };   int n, m, k;   int wt[100005];   pair<int, int> e[100005];   int perm[100005];   struct mycmp {     bool operator()(int i, int j) const { return wt[i] < wt[j]; }   };   void kruskal_met_0(vector<int>& ret) {     uf G(n);     for (int i(0); i < (m); i++) {       int eid(perm[i]), x(e[eid].first), y(e[eid].second);       if (x == 0 || y == 0) {         ret.push_back(eid);         G.uu(x, y);       }     }     for (int i(0); i < (m); i++) {       int eid(perm[i]), x(e[eid].first), y(e[eid].second), xr(G.ff(x)),           yr(G.ff(y));       if (xr - yr) {         ret.push_back(eid);         G.uu(x, y);       }     }     for (int i(0); i < (n); i++)       if (G.ff(i) != G.ff(0)) {         puts( -1 );         exit(0);       }   }   void kruskal_wo_0(vector<int>& ret) {     uf G(n);     for (int i(0); i < (m); i++) {       int eid(perm[i]), x(e[eid].first), y(e[eid].second), xr(G.ff(x)),           yr(G.ff(y));       if (x == 0 || y == 0) continue;       if (xr - yr) {         ret.push_back(eid);         G.uu(x, y);       }     }   }   int koppel[5005];   int main() {     cin >> n >> m >> k;     int deg0(0);     for (int i(0); i < (m); i++) {       int x, y, w;       cin >> x >> y >> w;       x--, y--;       wt[i] = w;       e[i].first = x, e[i].second = y;       if (x == 0 || y == 0) deg0++;     }     if (deg0 < k) {       puts( -1 );       exit(0);     }     for (int i(0); i < (m); i++) perm[i] = i;     sort(perm, perm + m, mycmp());     vector<int> mst_met, mst_wo;     kruskal_met_0(mst_met);     kruskal_wo_0(mst_wo);     uf G(n);     for (int i(0); i < (n); i++) koppel[i] = inf;     vector<int> doen;     for (__typeof((mst_met).end()) it((mst_met).begin()); it != (mst_met).end();          ++it) {       int eid(*it), x(e[eid].first), y(e[eid].second), xr(G.ff(x)), yr(G.ff(y));       if (x == 0)         koppel[yr] = wt[eid];       else if (y == 0)         koppel[xr] = wt[eid];       else {         int mi(min(koppel[xr], koppel[yr]));         koppel[xr] = koppel[yr] = mi;         G.uu(x, y);         doen.push_back(eid);       }     }     for (int iteratie(0); iteratie < (deg0 - k); iteratie++) {       pair<int, int> opt(inf, 0);       for (__typeof((mst_wo).end()) it((mst_wo).begin()); it != (mst_wo).end();            ++it) {         int eid(*it), x(e[eid].first), y(e[eid].second), xr(G.ff(x)), yr(G.ff(y));         if (xr == yr) continue;         opt = min(opt, make_pair(wt[eid] - max(koppel[xr], koppel[yr]), eid));       }       if (opt.first == inf) {         puts( -1 );         return 0;       }       int eid(opt.second), x(e[eid].first), y(e[eid].second), xr(G.ff(x)),           yr(G.ff(y));       int mik(min(koppel[xr], koppel[yr]));       koppel[xr] = koppel[yr] = mik;       G.uu(x, y);       doen.push_back(eid);     }     uf T(n);     for (__typeof((doen).end()) it((doen).begin()); it != (doen).end(); ++it) {       int eid(*it), x(e[eid].first), y(e[eid].second);       assert(T.ff(x) != T.ff(y));       T.uu(x, y);     }     if (((int)(doen).size()) != n - 1 - k) {       puts( -1 );       return 0;     }     for (int i(0); i < (m); i++) {       int eid(perm[i]), x(e[eid].first), y(e[eid].second), xr(T.ff(x)),           yr(T.ff(y));       if (x == 0 || y == 0) {         if (xr - yr) {           doen.push_back(eid);           T.uu(x, y);         }       }     }     cout << ((int)(doen).size()) << endl;     int som(0);     for (__typeof((doen).end()) it((doen).begin()); it != (doen).end(); ++it) {       cout << (*it + 1) <<    ;       som += wt[*it];     }     cout << endl;   }