#include<iostream>
#include<vector>
#include<queue>
using namespace std;
const int MAXN=1000+10;
const int INF=99999999;
struct data
{
int u,v,w;
};
vector<data> g[MAXN];
queue<int> q;
int n,m,st,en,x,y,s,d[MAXN];
bool inque[MAXN];
void spfa(int st)
{
d[st]=0;
q.push(st);
inque[st]=true;
while(!q.empty())
{
int u=q.front();
q.pop();
inque[u]=false;
for(int i=0;i<g[u].size();i++)
{
int v=g[u][i].v;
int w=g[u][i].w;
if(d[u]+w<d[v])
{
d[v]=d[u]+w;
if(!inque[v])
{
q.push(v);
inque[v]=true;
}
}
}
}
}
int main()
{
cin>>n>>m>>st>>en;
for(int i=1;i<=m;i++)
{
cin>>x>>y>>s;
g[x].push_back((data){x,y,s});
g[y].push_back((data){y,x,s});
}
for(int i=1;i<=n;i++)d[i]=INF;
spfa(st);
cout<<d[en];
return 0;
}