#define _CRT_SECURE_NO_WARNINGS 1
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
struct e_t {
int next, to, w;
}e[100000];
int head[20009], tail = 0;
bool vis[100000];
void add(int a, int b,int w)
{
e[++tail].next = head[a];
e[tail].to = b;
e[tail].w = w;
head[a] = tail;
}
int n, m, s, t;
int memory[20009][2000];
int dfs(int cur_pos, int cur__step)
{
if (memory[cur_pos][cur__step]) return memory[cur_pos][cur__step];
if (cur_pos == s) return 0;
int reval = 0x3F3F3F3F;
int cost = 0x3F3F3F3F;
for (int i = head[cur_pos]; i; i = e[i].next) {
if (!vis[i]) {
vis[i] = 1;
if (i & 1)vis[i + 1] = 1;
else vis[i - 1] = 1;
cost = dfs(e[i].to, cur__step + 1) + (e[i].w / cur__step);
if (reval >= cost) {
reval = cost;
}
vis[i] = 0;
if (i & 1)vis[i + 1] = 0;
else vis[i - 1] = 0;
}
}
return memory[cur_pos][cur__step] = reval;
}
int main()
{
scanf("%d%d%d%d", &n, &m, &s, &t);
for (int i = 0,a,b,c; i < m; i++) {
scanf("%d%d%d", &a, &b, &c);
add(a, b, c), add(b, a, c);
}
printf("%d", dfs(t, 1));
}