#https://www.infoarena.ro/problema/sate
#Complexitate:O(N+M) -> Fiecare sat este vizitat doar o data.In BFS() fiecare nod poate avea in total maxim 2M muchii (din prop grade) deci avem O(N+2M)=O(N+M)
from collections import deque
N, M,X,Y =0,0,0,0
drum = {}
with open ('sate.in','r')as f:
linie = f.readline().strip().split()
N, M,X,Y =int(linie[0]),int(linie[1]),int(linie[2]),int(linie[3])
# print(N,M,X,Y)
for i in range(1,N+1):
drum[i]=[]
for i in range(M):
linie = f.readline().strip().split()
x,y,d = int(linie[0]),int(linie[1]),int(linie[2])
drum[x].append((int(y),int(d)))
drum[y].append((int(x),int(-d)))
# print(drum)
coada1= deque([X])
coada2= deque([0])
ok=0
visited = [False]*(N+1)
visited[X] = True
while len(coada1):
tata = coada1.popleft()
if tata == Y:
ok=1
with open('sate.out','w')as g:
g.write(str(abs(coada2.popleft()))) # posibils a fie X>Y pentru abs
break
else:
lungime_currenta = coada2.popleft()
for vec,dr in drum[tata]:
if visited[vec] == False:
visited[vec] = True
lungime_currenta += dr
coada1.append(vec)
coada2.append(lungime_currenta)
lungime_currenta -= dr
visited[vec] = True
if ok==0:print("False")