#include <cstdlib>
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
struct Legatura {
int vecin;
int diferenta;
};
int distanta(const vector<vector<Legatura>>& graf, int start, int destinatie) {
vector<int> pozitie(graf.size());
vector<char> vizitat(graf.size(), false);
queue<int> coada;
coada.push(start);
vizitat[start] = true;
while (!coada.empty()) {
int nod = coada.front();
coada.pop();
if (nod == destinatie) {
return abs(pozitie[nod]);
}
for (const Legatura& legatura : graf[nod]) {
int vecin = legatura.vecin;
if (!vizitat[vecin]) {
vizitat[vecin] = true;
pozitie[vecin] = pozitie[nod] + legatura.diferenta;
coada.push(vecin);
}
}
}
return -1;
}
int main() {
ifstream intrare("sate.in");
ofstream iesire("sate.out");
int n, m, x, y;
intrare >> n >> m >> x >> y;
vector<vector<Legatura>> graf(n + 1);
for (int i = 0; i < m; ++i) {
int stanga, dreapta, d;
intrare >> stanga >> dreapta >> d;
graf[stanga].push_back({dreapta, d});
graf[dreapta].push_back({stanga, -d});
}
iesire << distanta(graf, x, y) << '\n';
}