#include <iostream>
#include <stdio.h>
#define inf 99999999
using namespace std;
int my_map[250][250];
int dist[250];
int s[250];
void dij(int n,int v)
{
int i,j,min,dir;
for(i=0;i<n;i++)
{
s[i]=0;
dist[i]=my_map[v][i];
}
s[v]=1;
dist[v]=0;
for(i=0;i<n;i++)
{
min=inf;
for(j=0;j<n;j++)
if(s[j]==0&&dist[j]<min)
{
dir=j;
min=dist[j];
}
if(min==inf)
break;
s[dir]=1;
for(j=0;j<n;j++)
if(s[j]==0&&dist[j]>dist[dir]+my_map[dir][j])
dist[j]=dist[dir]+my_map[dir][j];
}
}
int main()
{
int n,m,a,b,x,i,j,begin,end;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=0;i<201;i++)
for(j=0;j<201;j++)
if(i==j)
my_map[i][j]=0;
else
my_map[i][j]=inf;
for(i=0;i<m;i++)
{
scanf("%d%d%d",&a,&b,&x);
if(x<my_map[a][b])//!注意!两点之前可能不止存在一条路,需进行初次判断。
my_map[a][b]=my_map[b][a]=x;
}
scanf("%d%d",&begin,&end);
dij(n,begin);
if(dist[end]!=inf)
printf("%d\n",dist[end]);
else
printf("-1\n");
}
return 0;
}