#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <utility>
using namespace std;
ifstream f("sate.in");
ofstream g("sate.out");
vector<vector<pair<int,int>>> adj;
vector<int> dist;
int n,m,x,y;
void BFS(int source)
{
queue<int> q;
dist[source]=0;
q.push(source);
while(!q.empty())
{
int nod=q.front();
q.pop();
for(auto& pereche:adj[nod])
{
int vecin=pereche.first;
int cost=pereche.second;
if(dist[vecin]==-1)
{
if(vecin>nod)
{
dist[vecin]=dist[nod]+cost;
q.push(vecin);
}
else
{
dist[vecin]=dist[nod]-cost;
q.push(vecin);
}
}
}
}
}
int main()
{
f>>n>>m>>x>>y;
adj.resize(n+1);
dist.resize(n+1,-1);
for(int i=1; i<=m; i++)
{
int a,b,c;
f>>a>>b>>c;
adj[a].push_back({b,c});
adj[b].push_back({a,c});
}
BFS(x);
g<<dist[y];
return 0;
}