#include <stdio.h>
#define MAX 20
struct Edge{
    int src,dest,weight;
};
int parent[MAX];
int find(int i){
    while(parent[i]!=i)
        i=parent[i];
    return i;
}
void unionSets(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){
        printf("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("Inalid 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);
            unionSets(a,b);
            count++;
        }
    }
    return 0;
}