#include <stdio.h>
#include <stdlib.h>
int p,book[100005];
long long int dis[100005][2],inf=2147483647,min;
struct t
{
long long int w;
int v,next;
}e[500005];
long long int h[500005];
void add(int a,int b,long long int c)
{
e[++p].next=h[a];
h[a]=p;
e[p].v=b;
e[p].w=c;
}
int main()
{
int n,m,a,i,j,b,c,f;
long long int d;
scanf("%d%d%d%d",&n,&m,&a,&f);
for(i=0;i<=n;i++)
dis[i][0]=inf;
dis[a][0]=0;
for(i=0;i<m;i++)
{
scanf("%d%d%lld",&b,&c,&d);
add(b,c,d);
add(c,b,d);
if(b==a && dis[c][0]>d)
{
dis[c][0]=d;
dis[c][1]=d;
}
if(c==a && dis[c][0]>d)
{
dis[c][0]=d;
dis[c][1]=d;
}
}
book[a]=1;
for(c=1;c<n;c++)
{
min=inf;
for(j=1;j<=n;j++)
if(min>dis[j][0] && book[j]==0)
{
min=dis[j][0];
b=j;
}
book[b]=1;
for(i=h[b];i>0;i=e[i].next)
if(dis[e[i].v][0]>=dis[b][0]+e[i].w)
{
if(dis[b][1]<e[i].w)
dis[e[i].v][1]=e[i].w;
else
dis[e[i].v][1]=dis[b][1];
dis[e[i].v][0]=dis[b][0]+e[i].w;
}
}
printf("%lld ",dis[f][1]);
return 0;
}