#include<bits/stdc++.h>
using namespace std;
queue<int>q;
int n,m,s,t;
struct node{
int from,to,next,val;
};
node edge[6500];
int color[2500],dis[2500],head[2500];
int inq[2500];
int num;
void add(int from,int to,int val){
num++;
edge[num].from=from;
edge[num].to=to;
edge[num].val=min(val,edge[num].val);
edge[num].next=head[from];
head[from]=num;
}
void spfa(){
memset(dis,0x3f3f3f3f,sizeof(dis));
dis[s]=0;
q.push(s);
inq[s]=1;
while(!q.empty()){
int u=q.front();
q.pop();
inq[u]=0;
for(int i=head[u];i!=0;i=edge[i].next){
int tt=edge[i].to,vv=edge[i].val;
if(dis[tt]>dis[u]+vv){
dis[tt]=dis[u]+vv;
if(inq[tt]==0){
q.push(tt);
inq[tt]=1;
}
}
}
}
}
int main(){
for(int i=1;i<=6500;i++){
edge[i].val=0x3f3f3f3f;
}
cin>>n>>m>>s>>t;
for(int i=1;i<=m;i++){
int fr,to1,vv;
cin>>fr>>to1>>vv;
add(fr,to1,vv);
add(to1,fr,vv);
}
spfa();
cout<<dis[t];
}