#include #include #define maxn 10000 #define moc -1 struct dv { int v, c; }; int n,m,s,c; stack adj[maxn]; int d[maxn]; int done[maxn]; int fr; int main() { while (1) { cin >> n >> m >> s>>c; if (n==0 && m==0 && s == 0 && c==0) break; s--; c--; for (int i=0; i> k>> l>> j; pom.v = l -1; pom.c = j; pom2.v = k-1; pom2.c = j; adj[k-1].push(pom); adj[l-1].push(pom2); } for (int i=0; i j.c + d[ak]) { d[j.v] = d[ak] + j.c; if (done[j.v] == 0) done[j.v] = 1; fr++; } } done[ak] = 2; fr--; } cout << d[c]<