#include <bits/stdc++.h>
using namespace std;
const int NMAX = 30005;
vector<pair<int, int>> adj[NMAX];
queue<int> q;
int save[NMAX];
int main()
{
ifstream cin("sate.in");
ofstream cout("sate.out");
int n, m, x, y, a, b, d;
cin>>n>>m>>x>>y;
for(int i=1; i<=n; i++)
save[i] = 21e8;
for(int i=0; i<m; i++)
{
cin>>a>>b>>d;
adj[a].push_back({b, d});
adj[b].push_back({a, d});
//cout<<"OK"<<'\n';
}
q.push(x);
save[x] = 0;
int prev;
while(!q.empty())
{
int cur = q.front(); q.pop();
for(auto x : adj[cur])
{
int nextt = x.first, cost = x.second;
if(nextt == prev)
continue;
if(nextt > cur)
{
//cout<<" "<<nextt<<" "<<cur<<" "<<save[cur]<<'\n';
if(save[nextt] > save[cur] + cost)
{
save[nextt] = save[cur] + cost;
prev = cur; q.push(nextt);
}
}
else
{
//cout<<" "<<nextt<<" "<<cur<<'\n';
if(save[nextt] > save[cur] - cost)
{
save[nextt] = save[cur] - cost;
prev = cur; q.push(nextt);
}
}
}
}
/*for(int i=0; i<n; i++)
cout<<save[i]<<" ";
cout<<'\n';*/
cout<<save[y];
return 0;
}