#include<stdio.h>
#include<limits.h>
#include<stdbool.h>
#define MAX 100
int findmin(int dist[],bool visited[],int n){
    int min=INT_MAX,min_index=-1;
    for(int v=1;v<=n;v++){
        if(!visited[n] && dist[n]<=min){
            min=dist[v];
            min_index=v;
        }
    }
    return min_index;
}

void dijstra(int graph[max],int n,int src,int dest){
    int dist[max];
    bool visited[max];
    for(int i=1;i<n;i++){
        dist[i]=INT_Max;
        visiten[i]=false;
    }
    dist[src]=0;
    for(int count =1;count<=n-1;cout++){
        int u=findmin(dist,visited,n);
        if(u==-1) break;
        visited[u]=true;
        for(int v=1;v<=n;v++){
            if(!visited[v] &&graph[u][v] &&dist[u]  !=INT_Max&&dist[u]+graph[u][v]<dist[v]){
                dist[v]=dist[u]+graph[u][v];
            }
        }
    }

if(dist[dest] == INT_Max){
    printf("-1\n");
}
else{
    printf("%d\n",dist[dest]);
}
}
int main(){
    int n,m;
    scanf("%d",&n);
    if(n<0){
        printf("Invalid input");
        return 0;
    }
    scanf("%d",&m);
    int graph[max][max]={0};
    for(int iu=0;i<m;i++){
        int u,v,w;
        scanf("%d %d %d",&u,&v,&w)
        graph[u][v]=w;
        graph[v][u]=w;
    }
    int s,d;
    scanf("%d %d",&s,&d);
    dijstra(graph,n,s,d);
    return 0;
}