#include <bits/stdc++.h>
using namespace std;
#define MAXN 10000
int M,N;
vector<pair<int, int> > adj[MAXN];
long long dist[MAXN];
int visto[MAXN];
void dijkstra(int inizio,int fine){
int u;
for(u=0; u<=N; u++) dist[u]=9999999999999;
dist[inizio]=0;
priority_queue<pair<int, int> > pq;
pq.push(make_pair(0,inizio));
while(!pq.empty()){
int s=pq.top().second;
pq.pop();
if(s==fine) break;
if(visto[s]) continue;
visto[s]=1;
for(u=0;u<adj[s].size();u++){
int next = adj[s][u].second;
int Peso = adj[s][u].first;
if(dist[s]+Peso<dist[next]){
dist[next] = dist[s]+Peso;
pq.push(make_pair(-dist[next], next));
}
}
}
}
int main(void)
{
int i,rad, end;
int a,b,w;
cin >> N >> M;
cin >> rad >> end;
for(i=0;i<M; ++i){
cin >> a >> b >> w;
adj[a].push_back(make_pair(w,b));
}
int u;
dijkstra(rad,end);
cout << dist[end] << endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgTUFYTiAxMDAwMAppbnQgTSxOOwp2ZWN0b3I8cGFpcjxpbnQsIGludD4gPiBhZGpbTUFYTl07CmxvbmcgbG9uZyBkaXN0W01BWE5dOwppbnQgdmlzdG9bTUFYTl07Cgp2b2lkIGRpamtzdHJhKGludCBpbml6aW8saW50IGZpbmUpewoJaW50IHU7Cglmb3IodT0wOyB1PD1OOyB1KyspIGRpc3RbdV09OTk5OTk5OTk5OTk5OTsKCWRpc3RbaW5pemlvXT0wOwoJcHJpb3JpdHlfcXVldWU8cGFpcjxpbnQsIGludD4gPiBwcTsKCXBxLnB1c2gobWFrZV9wYWlyKDAsaW5pemlvKSk7Cgl3aGlsZSghcHEuZW1wdHkoKSl7CgkJaW50IHM9cHEudG9wKCkuc2Vjb25kOwoJCXBxLnBvcCgpOwoJCWlmKHM9PWZpbmUpIGJyZWFrOwoJCWlmKHZpc3RvW3NdKSBjb250aW51ZTsKCQl2aXN0b1tzXT0xOwoJCQoJCWZvcih1PTA7dTxhZGpbc10uc2l6ZSgpO3UrKyl7CgkJCWludCBuZXh0ID0gYWRqW3NdW3VdLnNlY29uZDsKCQkJaW50IFBlc28gPSBhZGpbc11bdV0uZmlyc3Q7CgkJCQoJCQlpZihkaXN0W3NdK1Blc288ZGlzdFtuZXh0XSl7CgkJCQlkaXN0W25leHRdID0gZGlzdFtzXStQZXNvOwoJCQkJcHEucHVzaChtYWtlX3BhaXIoLWRpc3RbbmV4dF0sIG5leHQpKTsKCQkJfQoJCX0KCX0KCQp9CgppbnQgbWFpbih2b2lkKQp7CglpbnQgaSxyYWQsIGVuZDsKCWludCBhLGIsdzsKCWNpbiA+PiBOID4+IE07CgljaW4gPj4gcmFkID4+IGVuZDsKCWZvcihpPTA7aTxNOyArK2kpewoJCWNpbiA+PiBhID4+IGIgPj4gdzsKCQlhZGpbYV0ucHVzaF9iYWNrKG1ha2VfcGFpcih3LGIpKTsKCX0KCWludCB1OwoJZGlqa3N0cmEocmFkLGVuZCk7Cgljb3V0IDw8IGRpc3RbZW5kXSA8PCBlbmRsOwpyZXR1cm4gMDsKfQ==