#include<stdio.h>
#include<string.h>
int map[205][205],dist[205];
int vis[205],n,m,s,t,s;
void init1()
{
int i,j;
memset(vis,0,sizeof(vis));
for(i = 0;i < n;i ++)
{
for(j = 0;j < n;j ++)
{
if(i != j)
map[i][j] = 1 << 30;
else
map[i][j] = 0;
}
}
return ;
}
void init2()
{
int i;
for(i = 0;i < n;i ++)
dist[i] = map[s][i];
return ;
}
void Dijkstra()
{
int i,j,k,min;
vis[s] = 1;
for(i = 0;i < n;i ++)
{
min = 1 << 30;
k = -1;
for(j = 0;j < n;j ++)
{
if(!vis[j] && dist[j] < min)
{
min = dist[j];
k = j;
}
}
if(k == -1)
return ;
vis[k] = 1;
for(j = 0;j < n;j ++)
{
if(!vis[j] && dist[j] > map[k][j]+dist[k])
dist[j] = map[k][j]+dist[k];
}
}
return ;
}
int main(void)
{
int i,j;
int a,b,x;
while(~scanf("%d%d",&n,&m))
{
init1();
while(m--)
{
scanf("%d%d%d",&a,&b,&x);
if(map[a][b] > x)
map[a][b] = map[b][a] = x;
}
scanf("%d%d",&s,&t);
init2();
Dijkstra();
if(dist[t] != 1 << 30)
printf("%d\n",dist[t]);
else
printf("-1\n");
}
return 0;
}