#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
const int N = 110, M = 1010;
struct Edge{
int u, v, w;
bool operator < (const Edge &h) const {
return w < h.w;
}
}e[M];
int n, m, mst, fa[N], path[N];
int find(int x) {
if (fa[x] != x) fa[x] = find(fa[x]);
return fa[x];
}
int main()
{
freopen("graph.in", "r", stdin);
freopen("mst.txt", "w", stdout);
cin >> n >> m;
for (int i=1; i<=m; i++)
cin >> e[i].u >> e[i].v >> e[i].w;
sort(e+1,e+m+1);
int cnt = 0;
for (int i=1; i<=n; i++) fa[i] = i;
for (int i=1; i<=m; i++) {
int pu = find(e[i].u), pv = find(e[i].v);
if (pu != pv) {
fa[pu] = pv;
mst += e[i].w;
path[++cnt] = i;
}
if (cnt == n-1) break;
}
if (cnt != n-1) cout << "No Solution!" << endl;
else {
for (int i=1; i<=cnt; i++)
printf("%d\t%d\t%d\n", e[path[i]].u, e[path[i]].v, e[path[i]].w);
}
return 0;
}