/*迪杰斯特拉模板
求众点中起点到任意一点的最小距离*/
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
#define INF 999999
int a[1001][1001],f[1001],m,n,p,q,dis[1001];
void AA(int k)
{
int i,j,l=0;
memset(f,0,sizeof(f));
for(i=0; i<m; i++)
dis[i]=a[k][i];
for(i=1; i<m; i++)
{
int Min=INF;
for(j=0; j<m; j++)//从所有路中选出最短至K的路
if(!f[j]&&dis[j]<Min)
{
Min=dis[l=j];
}
f[l]=1;//标记上层for中的最短路已经走过因为此路最短所以且又未走过,故最短;
for(j=0; j<m; j++)//寻找并更新所有能用(l->k+l->j)<(k->j)代替的值
if(f[j]==0&&(dis[l]+a[l][j]<dis[j]))
{
dis[j]=dis[l]+a[l][j];
}
}
}
int main()
{
int i,j,k,l;
int N;
while(~scanf("%d %d",&m,&n))
{
for(i=0; i<=m; i++)
for(j=0; j<=m; j++)
a[i][j]=INF;
for(i=0; i<n; i++)
{
scanf("%d %d %d",&j,&k,&l);
if(a[j][k]>l) a[j][k]=a[k][j]=l;
}
int start,end;
scanf("%d %d",&start,&end);//输入起点和终点,如果有多个起点和终点只需合并并将其权值赋值为0即可
if(start==end) printf("0\n");
else
{
AA(end);
if(dis[start]!=INF)
printf("%d\n",dis[start]);
else printf("-1\n");
}
}
}