#include<cstdlib>
#include<iostream>#include<cstring>using namespace std;
int mj[202][202];
int result[202];int n,m;void dij(int x)
{ int j,flag[202],i,u,min; for(i=0;i<n;i++) { result[i]=mj[x][i]; flag[i]=0; } flag[x]=1; result[x]=0; for(i=1;i<n;i++) { min=200005; for(j=0;j<n;j++) if(result[j]<=min&&flag[j]==0) {min=result[j];u=j;} flag[u]=1; for(j=0;j<n;j++) { if((result[j]>(min+mj[u][j]))&&flag[j]==0) result[j]=min+mj[u][j]; } }}
/*第一次做最短路径的题目,一次交就ac了
注意有重边输入,取最小的就ok了*/
int main()
{ int x,y,z,t,i,j; while(scanf("%d %d",&n,&m)!=EOF) { for(i=0;i<n;i++) for(j=0;j<n;j++) mj[i][j]=200005; for(i=0;i<m;i++) { scanf("%d %d %d",&x,&y,&z); if(z<mj[x][y]) mj[x][y]=z; if(z<mj[y][x]) mj[y][x]=z; } scanf("%d %d",&x,&y); dij(x); if(result[y]<200005) printf("%d\n",result[y]); else printf("-1\n");}
return 0;
}