program sate_preoni_2006;
var g:array[0..2,1..100024] of longint;
start,cd,dist:array[1..30000] of longint;
viz:array[1..30000] of 0..1;
n,m,s,d,i:longint;
fi,fo:text;
procedure citire;
var i,j,k,km,z:longint;
begin
readln(fi,n,m,s,d);
k:=0;
for z:=1 to m do
begin
readln(fi,i,j,km);
k:=k+1;
g[0,k]:=j;
g[1,k]:=start[i];
g[2,k]:=km;
start[i]:=k;
k:=k+1;
g[0,k]:=i;
g[1,k]:=start[j];
g[2,k]:=km;
start[j]:=k;
end;
end;
procedure bell_f(s:longint);
var st,sf,p,nod:longint;
begin
for p:=1 to n do
dist[p]:=maxlongint;
st:=1; sf:=1;
cd[st]:=s; dist[s]:=0;
while st<=sf do
begin
nod:=cd[st];
viz[nod]:=0;
p:=start[nod];
while p<>0 do
begin
if dist[nod]+g[2,p]<dist[g[0,p]] then
begin
dist[g[0,p]]:=dist[nod]+g[2,p];
if viz[g[0,p]]=0 then
begin
sf:=sf+1;
cd[sf]:=g[0,p];
viz[g[0,p]]:=1;
end;
end;
p:=g[1,p];
end;
st:=st+1;
end;
end;
begin
assign(fi,'sate.in'); reset(fi);
assign(fo,'sate.out'); rewrite(fo);
citire;
bell_f(s);
writeln(fo,dist[d]);
close(fi);
close(fo);
end.