#include<stdio.h>
#define max 20
struct edge{
    int src,dest,weight;
    
};
int parent[max];
int find(int i){
    while(parent[i]!=1){
        i=parent[i];
        
    }
    return i;
}
void unionset(int i,int j){
    int a=find(i);
    int b=find(j);
    parent[a]=b;
}
int main(){
    int v,e;
    if(scanf("%d",&v)!=1 ||scanf("%d",&e)!=1){
        print("Invalid input");
        return 0;
    }
    if(v<0||e<0){
        printf("-1");
        return 0;
    }
    struct edge edges[max];
    for(int i=0;i<e;i++){
        if(scanf("%d %d %d",&edges[i].src,&edges[i].dest,&edges[i].weight)!=3){
            printf("Invalid input");
            return 0;
        }
    }
    for(int i=0;i<v;i++){
        parent[i]=i;
        
    }
    for(int i=0;i<e-1;i++){
        for(int j=0;j<e-i-1;j++){
            if(edges[j].weight<edges[j+1].weight){
                struct edge temp=edges[j];
                edges[j]=edges[j+1];
                edges[j+1]=temp;
            }
        }
    }
    int count=0;
    for(int i=0;i<e&&count<v-1;i++){
        int a=find(edges[i].src);
        int b=find(edges[i].dest);
        if(a!=b){
            printf("%d %d %d\n",edges[i].src,edges[i].dest,edges[i].weight);
            unionset(a,b);
            count++;
        }
    }
    return 0;
}