#include <bits/stdc++.h>
using namespace std;
const int maxn=10007;
int n,m,s,t;
struct lol{
int next;
int to;
int v;
}edge[maxn];
int cnt=1,head[maxn];
int dist[maxn];
bool vis[maxn];
void add_edge(int x,int y,int w){
edge[cnt].to=y;
edge[cnt].v=w;
edge[cnt].next=head[x];
head[x]=cnt++;
}
int main(){
cin>>n>>m>>s>>t;
for(int i=1;i<=n;++i){
vis[i]=0;
dist[i]=1e6;
}
for(int i=1;i<=m;++i){
int x,y,z;
cin>>x>>y>>z;
add_edge(x,y,z);
add_edge(y,x,z);
}
dist[s]=0;vis[s]=1;
queue<int>q;
q.push(s);
while(!q.empty()){
int w;
w=q.front();
q.pop();
vis[w]=0;
for(int i=head[w];i;i=edge[i].next){
int e,z;
e=edge[i].to;
z=edge[i].v;
if(dist[e]>dist[w]+z){
dist[e]=dist[w]+z;
if(vis[e]==0){
q.push(e);
vis[e]=1;
}
}
}
}
cout<<dist[t]<<endl;
return 0;
}