#include<bits/stdc++.h>
#define maxn 100
using namespace std;
struct edge{
int u,v,w;
}edges[maxn];
int vis[maxn],m,n,s[maxn];
bool cmp(edge e1,edge e2){
if(e1.w!=e2.w) return e1.w<e2.w;
else {
if(e1.u!=e2.u) return e1.u<e2.u;
else return e1.v<e2.v;
}
}
bool isOK(){
for(int i=1;i<=m-1;i++){
if(s[i]!=s[i+1]) return false;
}
return true;
}
void Kruskal(){
while(1){
if(isOK()) break;
else{
int e=-1;
for(int i=0;i<n;i++){
if(!vis[i]&&s[edges[i].u]!=s[edges[i].v]){
e=i;
break;
}
}
vis[e]=1;
int t=s[edges[e].v];
for(int i=1;i<=m;i++){
if(s[i]==t){
s[i]=s[edges[e].u];
}
}
}
}
}
int main(){
cin>>m>>n;
for(int i=0;i<n;i++){
int v1,v2,weight;
cin>>v1>>v2>>weight;
edges[i].u=v1;
edges[i].v=v2;
edges[i].w=weight;
}
sort(edges,edges+n,cmp);
for(int i=1;i<=m;i++){
s[i]=i;
}
Kruskal();
for(int i=0;i<n;i++){
cout<<edges[i].u<<" "<<edges[i].v<<" "<<edges[i].w<<" "<<vis[i]<<endl;
}
return 0;
}