#include<stdio.h>
int main()
{
int n=0,m=0,i=0,j=0,k=0,l=0,x[205][205]={0},a=0,b=0,c=0,s=0,t=0,d[205]={0};
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=0;i<=n;i++)
{
for(j=0;j<=n;j++)
{
x[i][j]=0;
}
}
for(i=0;i<m;i++)
{
scanf("%d%d%d",&a,&b,&c);
if((x[a][b]==0)||(x[a][b]>c))
{
x[a][b]=c;
x[b][a]=c;
}
if(a==b) x[a][b]=0;
}
scanf("%d%d",&s,&t);
for(i=0;i<=n;i++)
d[i]=0;
d[s]=1;
for(i=0;i<n;i++)
{
j=0x3f3f3f3f;//记录未被标记过的到s最短的点的距离,注意一开始要设置成最大。
l=-1;
for(k=0;k<n;k++)
{
if((x[s][k]>0)&&(x[s][k]<j)&&(d[k]==0))
{
j=x[s][k];
l=k;
}
}
if(l>-1)
{
d[l]=1;
for(k=0;k<n;k++)
{
if((x[l][k]>0)&&(x[l][k]+x[s][l]<x[s][k]))
{
x[s][k]=x[l][k]+x[s][l];
}
if((x[l][k]>0)&&(x[s][k]==0)&&(k!=s))
{
x[s][k]=x[l][k]+x[s][l];
}
}
}
}
if((x[s][t]!=0)&&(s!=t)) printf("%d\n",x[s][t]);
else if(s==t) printf("0\n");
else printf("-1\n");
}
}