#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
const int N=1000010;
int n,m,start,ed,idx;
int e[N],h[N],ne[N],w[N];
int dist[N],st[N];
void add(int a,int b,int c)
{
e[idx]=b,w[idx]=c;ne[idx]=h[a],h[a]=idx++;
}
void spfa()
{
memset(dist,0x3f,sizeof(dist));
queue<int>q;
q.push(start);
st[start]=1;
dist[start]=0;
while(!q.empty())
{
int t=q.front();
q.pop();
st[t]=0;
for(int i=h[t];i!=-1;i=ne[i])
{
int j=e[i];
if(dist[j]>dist[t]+w[i])
{
dist[j]=dist[t]+w[i];
if(!st[j])
{
q.push(j);
st[j]=1;
}
}
}
}
}
int main()
{
memset(h,-1,sizeof(h));
cin>>n>>m;
cin>>start>>ed;
int x,y,z;
for(int i=0;i<m;i++)
{
cin>>x>>y>>z;
add(x,y,z);
add(y,x,z);
}
spfa();
cout<<dist[ed];
return 0;
}