#include <bits/stdc++.h>
using namespace std;
struct Edge{
int to,w;
};
vector<Edge> vt[2505];
int n,m,s,e,dis[2505];
void spfa(){
for(int i=1;i<=n;i++)
dis[i] = 10000;
queue<int> q;
dis[s] = 0;
q.push(s);
while(!q.empty()){
int u = q.front();
q.pop();
for(int i=0;i<vt[u].size();i++){
Edge e = vt[u][i];
int v=e.to, w=e.w;
if(dis[v]>dis[u]+w){
dis[v] = dis[u]+w;
q.push(v);
}
}
}
printf("%d",dis[e]);
}
int main(){
cin >> n >> m >> s >> e;
int u,v,w;
for(int i=0;i<m;i++){
cin >> u >> v >> w;
vt[u].push_back((Edge){v,w});
vt[v].push_back((Edge){u,v});
}
spfa();
return 0;
}