#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("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].weight);
            unionSets(a, b);
            count++;
        }
    }
    return 0;
}