#include #include #include #include #include #include #include #include #define se second #define fi first #define mp make_pair #define pb push_back typedef long long ll; typedef long double ld; using namespace std; int main() { int n, m; cin >> n >> m; vector>> vert(m); for (int i = 0; i < m; i++) { int x, y, w; cin >> x >> y >> w; x--, y--; vert[i] = {w, {x, y}}; } vector used(n, false); used[0] = true; vector> ostov; int answ = 0; for (int _ = 0; _ < n - 1; _++) { pair> mn = {10000000, {-1, -1}}; for (int i = 0; i < m; i++) { if (used[vert[i].se.fi] != used[vert[i].se.se]) { mn = min(mn, vert[i]); } } ostov.push_back(mn.se); answ += mn.fi; used[mn.se.fi] = true; used[mn.se.se] = true; } cout << answ << '\n'; for (auto e : ostov) { cout << e.fi + 1 << ' ' << e.se + 1 << '\n'; } return 0; }