#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]; // نزدیک‌ترین راس از بین راس‌های انتخاب شده
bool used[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;	 // صفر قرار می‌دهیم تا ابتدا راس صفر(یک) انتخاب شود
	for (int i=0; i<n; i++) {
		int v = -1;
		for (int j=0; j<n; j++)
			if (!used[j] && (v == -1 || min_e[j] < min_e[v]))
				v = j;
	
		if (min_e[v] == INF) 
			return false; // هیچ یالی از راس‌هایی انتخابی به بیرون وجود ندارد
		
		used[v] = true;
		if (sel_e[v] != -1)
			ans.push_back(make_pair(sel_e[v],v)); // به مجموعه v اضافه کردن راس
		
		for (int j=0; j<(int)V[v].size(); j++) // به روز کردن مقادیر آرایه‌ها
			if (V[v][j].second < min_e[V[v][j].first]) {
				min_e[V[v][j].first] =V[v][j].second;
				sel_e[V[v][j].first] = v;
			}
	}
	return true;
}

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";
}