#include<iostream>
#include<string>
#include<string.h>
#define ri register int
using namespace std;
const int N=4e5;
const int MAX=0x3f3f3f3f;
struct wyx{
int to,next,w;
}edges[N];
int tot,n,m,s,t,sum;
int head[N],d[N],dp[N];
bool ok[N];
void add(ri u,ri v,ri len){
edges[tot].to=v,edges[tot].next=head[u],edges[tot].w=len;
head[u]=tot++;
return;
}
void dijkstra(){
ri mi,to,v,w;
for(ri i=1;i<=n;i++){
mi=-1;
for(ri j=1;j<=n;j++){
if(ok[j]==false&&(mi==-1||d[mi]>d[j])){
mi=j;
}
}
ok[mi]=true;
for(ri j=head[mi];j!=-1;j=edges[j].next){
to=edges[j].to,w=edges[j].w;
sum=dp[to]=dp[mi]+1;
if(ok[to]==false&&d[to]>d[mi]+w/sum){
d[to]=d[mi]+w/sum;
}
}
}
}
int main(){
std::ios::sync_with_stdio(false);
std::cin.tie(NULL);
cin>>n>>m>>s>>t;
for(ri i=1;i<=n;i++){
d[i]=MAX,head[i]=-1;
}
ri u,v,len;
for(ri i=1;i<=m;i++){
cin>>u>>v>>len;
add(u,v,len);
add(v,u,len);
}
d[t]=0;
dp[t]=0;
dijkstra();
cout<<d[s]<<endl;
return 0;
}