import sys
import heapq
from collections import deque
input = sys.stdin.readline
INF = float('inf')
while True:
n, m = map(int, input().split())
if n == 0 and m == 0:
break
s, d = map(int, input().split())
graph = [[] for _ in range(n)]
rgraph = [[] for _ in range(n)]
for _ in range(m):
u, v, p = map(int, input().split())
graph[u].append((v, p))
rgraph[v].append((u, p))
dist = [INF] * n
dist[s] = 0
heap = [(0, s)]
while heap:
cost, u = heapq.heappop(heap)
if cost > dist[u]:
continue
for v, w in graph[u]:
if cost + w < dist[v]:
dist[v] = cost + w
heapq.heappush(heap, (dist[v], v))
if dist[d] == INF:
print(-1)
continue
q = deque([d])
while q:
cur = q.popleft()
for prev, w in rgraph[cur]:
if dist[prev] + w == dist[cur]:
for i, (nv, w2) in enumerate(graph[prev]):
if nv == cur and w2 == w:
graph[prev][i] = (-1, -1)
q.append(prev)
dist2 = [INF] * n
dist2[s] = 0
heap = [(0, s)]
while heap:
cost, u = heapq.heappop(heap)
if cost > dist2[u]:
continue
for v, w in graph[u]:
if v == -1:
continue
if cost + w < dist2[v]:
dist2[v] = cost + w
heapq.heappush(heap, (dist2[v], v))
print(-1 if dist2[d] == INF else dist2[d])
aW1wb3J0IHN5cwppbXBvcnQgaGVhcHEKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUKCmlucHV0ID0gc3lzLnN0ZGluLnJlYWRsaW5lCklORiA9IGZsb2F0KCdpbmYnKQoKd2hpbGUgVHJ1ZToKICAgIG4sIG0gPSBtYXAoaW50LCBpbnB1dCgpLnNwbGl0KCkpCiAgICBpZiBuID09IDAgYW5kIG0gPT0gMDoKICAgICAgICBicmVhawoKICAgIHMsIGQgPSBtYXAoaW50LCBpbnB1dCgpLnNwbGl0KCkpCiAgICBncmFwaCA9IFtbXSBmb3IgXyBpbiByYW5nZShuKV0KICAgIHJncmFwaCA9IFtbXSBmb3IgXyBpbiByYW5nZShuKV0KICAgIAogICAgZm9yIF8gaW4gcmFuZ2UobSk6CiAgICAgICAgdSwgdiwgcCA9IG1hcChpbnQsIGlucHV0KCkuc3BsaXQoKSkKICAgICAgICBncmFwaFt1XS5hcHBlbmQoKHYsIHApKQogICAgICAgIHJncmFwaFt2XS5hcHBlbmQoKHUsIHApKQogICAgCiAgICBkaXN0ID0gW0lORl0gKiBuCiAgICBkaXN0W3NdID0gMAogICAgaGVhcCA9IFsoMCwgcyldCiAgICB3aGlsZSBoZWFwOgogICAgICAgIGNvc3QsIHUgPSBoZWFwcS5oZWFwcG9wKGhlYXApCiAgICAgICAgaWYgY29zdCA+IGRpc3RbdV06CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgZm9yIHYsIHcgaW4gZ3JhcGhbdV06CiAgICAgICAgICAgIGlmIGNvc3QgKyB3IDwgZGlzdFt2XToKICAgICAgICAgICAgICAgIGRpc3Rbdl0gPSBjb3N0ICsgdwogICAgICAgICAgICAgICAgaGVhcHEuaGVhcHB1c2goaGVhcCwgKGRpc3Rbdl0sIHYpKQogICAgCiAgICBpZiBkaXN0W2RdID09IElORjoKICAgICAgICBwcmludCgtMSkKICAgICAgICBjb250aW51ZQoKICAgIHEgPSBkZXF1ZShbZF0pCiAgICB3aGlsZSBxOgogICAgICAgIGN1ciA9IHEucG9wbGVmdCgpCiAgICAgICAgZm9yIHByZXYsIHcgaW4gcmdyYXBoW2N1cl06CiAgICAgICAgICAgIGlmIGRpc3RbcHJldl0gKyB3ID09IGRpc3RbY3VyXToKICAgICAgICAgICAgICAgIGZvciBpLCAobnYsIHcyKSBpbiBlbnVtZXJhdGUoZ3JhcGhbcHJldl0pOgogICAgICAgICAgICAgICAgICAgIGlmIG52ID09IGN1ciBhbmQgdzIgPT0gdzoKICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhbcHJldl1baV0gPSAoLTEsIC0xKQogICAgICAgICAgICAgICAgcS5hcHBlbmQocHJldikKICAgIAogICAgZGlzdDIgPSBbSU5GXSAqIG4KICAgIGRpc3QyW3NdID0gMAogICAgaGVhcCA9IFsoMCwgcyldCiAgICB3aGlsZSBoZWFwOgogICAgICAgIGNvc3QsIHUgPSBoZWFwcS5oZWFwcG9wKGhlYXApCiAgICAgICAgaWYgY29zdCA+IGRpc3QyW3VdOgogICAgICAgICAgICBjb250aW51ZQogICAgICAgIGZvciB2LCB3IGluIGdyYXBoW3VdOgogICAgICAgICAgICBpZiB2ID09IC0xOgogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgaWYgY29zdCArIHcgPCBkaXN0Mlt2XToKICAgICAgICAgICAgICAgIGRpc3QyW3ZdID0gY29zdCArIHcKICAgICAgICAgICAgICAgIGhlYXBxLmhlYXBwdXNoKGhlYXAsIChkaXN0Mlt2XSwgdikpCiAgICAKICAgIHByaW50KC0xIGlmIGRpc3QyW2RdID09IElORiBlbHNlIGRpc3QyW2RdKQo=
NyA5CjAgNgowIDEgMQowIDIgMQowIDMgMgowIDQgMwoxIDUgMgoyIDYgNAozIDYgMgo0IDYgNAo1IDYgMQo0IDYKMCAyCjAgMSAxCjEgMiAxCjEgMyAxCjMgMiAxCjIgMCAzCjMgMCAyCjYgOAowIDEKMCAxIDEKMCAyIDIKMCAzIDMKMiA1IDMKMyA0IDIKNCAxIDEKNSAxIDEKMyAwIDEKMCAw
7 9
0 6
0 1 1
0 2 1
0 3 2
0 4 3
1 5 2
2 6 4
3 6 2
4 6 4
5 6 1
4 6
0 2
0 1 1
1 2 1
1 3 1
3 2 1
2 0 3
3 0 2
6 8
0 1
0 1 1
0 2 2
0 3 3
2 5 3
3 4 2
4 1 1
5 1 1
3 0 1
0 0