#include<bits/stdc++.h>
using namespace std;
int n, m, s, t;
vector<int> to(1), dis(1);
vector<size_t> nxt(1);
size_t head[2505];
void add(int x, int y, int z){
to.push_back(y), dis.push_back(z), nxt.push_back(head[x]);
head[x] = to.size() - 1lu;
}vector<int> ans(2505, INT_MAX);
multimap<int, int> mp;
int dijkstra(int s, int t){
ans[s] = 0;
mp.insert(pair<int, int>(0, s));
while(mp.size()){
int x = mp.begin() -> second;
if(x == t)
return mp.begin() -> first;
mp.erase(mp.begin());
for(size_t i = head[x]; i; i = nxt[i]){
int y = to[i];
if(ans[y] > ans[x] + dis[i])
mp.insert(pair<int, int>(ans[y] = ans[x] + dis[i], y));
}
}return 0;
}signed main(){
scanf("%d%d%d%d", &n, &m, &s, &t);
while(m--){
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
add(u, v, w);
}printf("%d", dijkstra(s, t));
return 0;
}