#3 #6 #7 #8 #10 WA
#include<bits/stdc++.h>
using namespace std;
struct node{
int d,v;
friend bool operator>(const node &a,const node &b)
{
return a.d>b.d;
}
};
priority_queue<node,vector<node>,greater<node> >q;
vector<int>a[2505];
int n,m,s,t,w[2505][2505],d[2505],vis[2505];
void dijkstra()
{
q.push({s,0});
d[s]=0;
while(!q.empty())
{
node t=q.top();q.pop();
if(vis[t.d])continue;
for(int i=0;i<a[t.d].size();i++)
{
int v=a[t.d][i];
d[v]=min(d[v],d[t.d]+w[v][t.d]);
q.push((node){v,d[v]});
}
vis[t.d]=1;
}
}
signed main()
{
cin.tie(0)->sync_with_stdio(0);
cin>>n>>m>>s>>t;
for(int i=1;i<=n;i++)
d[i]=0x3f3f3f3f;
for(int i=1;i<=m;i++)
{
int u,v,c;
cin>>u>>v>>c;
a[u].push_back(v);
a[v].push_back(u);
w[u][v]=w[v][u]=c;
}
dijkstra();
cout<<d[t];
return 0;
}