#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int INF=2*1000*1000*1000+5; // ثابتی بسیار بزرگ که از هر ورودی بزرگ‌تر باشد
const int N=1000; // حداکثر تعداد راس‌ها
int n,m; //به ترتیب تعداد راس‌ها، تعداد یال‌ها
int min_e[N]; // کم‌ترین فاصله‌ی هر راس تا راس‌های انتخاب شده
int sel_e[N]; // نزدیک‌ترین راس از بین راس‌های انتخاب شده
vector <pair<int,int> > ans; // پشته‌ای که جواب را نگه می‌دارد
vector <pair<int,int> > V[N]; // وزن و شماره راس‌هایی که به آن یال دارد
bool find_mst(){
	fill_n(min_e,n,INF); // مقدار دهی اولیه
	fill_n(sel_e,n,-1);  // مقدار دهی اولیه
	fill_n(used,n,false);  // مقدار دهی اولیه
	min_e[0]=0;	 // صفر قرار می‌دهیم تا ابتدا راس صفر(یک) انتخاب شود
	set < pair<int,int> > q; // داده‌ساختاری که فاصله هر راسی که به مجومه انتخاب شده راه دارد را نگه می‌دارد
	q.insert (make_pair (0, 0)); 
	for (int i=0; i<n; ++i) {
		if (q.empty()) 
			return false;
		int v = q.begin()->second; // کوچک‌ترین عضو یعنی نزدیک‌ترین عضو است set عضو ابتدایی
		q.erase (q.begin());
 
		if (sel_e[v] != -1)
			ans.push_back(make_pair(sel_e[v],v));
 
		for (int j=0; j<V[v].size(); j++) {
			int to = V[v][j].first,
				cost = V[v][j].second;
			if (cost < min_e[to]) {
				q.erase (make_pair (min_e[to], to));
				min_e[to] = cost;
				sel_e[to] = v;
				q.insert (make_pair (min_e[to], to));
			}
 		}
	}
}

int main() {	
	cin >> n>>m;
	for(int i=0; i<m; i++){ // حلقه گرفتن یال‌ها
		int a,b,w;
		cin >>a>>b>>w; // به ترتیب ۲ راس و سپس وزن یال
		V[a-1].push_back(make_pair(b-1,w)); // است n-1 یکی کم می‌کنیم چون بازه‌ی معتبر ما صفر تا
		V[b-1].push_back(make_pair(a-1,w)); // است n-1 یکی کم می‌کنیم چون بازه‌ی معتبر ما صفر تا
	}
	if(find_mst()==false)
		cout << "No MST!\n";
}