#include<bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f;
const int maxn=13000;
int t,c,ts,te;
int dis[maxn];
bool vis[maxn];
struct node{
int v,w,next;
node(){}
node(int _v,int _w,int _next){
v=_v;
w=_w;
next=_next;
}
}e[maxn];
int head[maxn],len;
void init(){
memset(head,-1,sizeof head);
len=0;
}
void add(int u,int v,int w){
e[len]=node(v,w,head[u]);
head[u]=len++;
}
void add2(int u,int v,int w){
add(u,v,w);
add(v,u,w);
}
void spfa(int u){
memset(vis,false,sizeof vis);
vis[u]=true;
memset(dis,inf,sizeof dis);
dis[u]=0;
queue<int> qu;
qu.push(u);
while(!qu.empty()){
u=qu.front();
qu.pop();
vis[u]=false;
for (int j=head[u];~j;j=e[j].next){
int v=e[j].v;
int w=e[j].w;
if (dis[v]>dis[u]+w) {
dis[v]=dis[u]+w;
if (!vis[v]){
qu.push(v);
vis[v]=true;
}
}
}
}
}
int main(){
init();
cin>>t>>c>>ts>>te;
while(c--){
int u,v,w;
cin>>u>>v>>w;
add2(u,v,w);
}
spfa(ts);
cout<<dis[te]<<endl;
return 0;
}