from collections import deque
infile = open("sate.in", "r")
outfile = open("sate.out", "w")
line = infile.readline()
nr_sate, nr_relatii, sat_start, sat_end = line.strip().split()
adj_list = {}
parents = {}
visited = set()
def calculate_distance(start, end, parents):
distance = 0
parent, weight = parents[end]
if parent < end:
distance += int(weight)
else:
distance -= int(weight)
end = parent
while start != end:
parent, weight = parents[end]
if parent < end:
distance += int(weight)
else:
distance -= int(weight)
end = parent
return distance ##case if the nodes are neighbours
def bfs(adj_list):
queue = deque()
queue.append(sat_start)
while len(queue) != 0:
node = queue.popleft()
for (neighbour, weight) in adj_list[node]:
if neighbour not in visited:
parents[neighbour] = (node, weight)
queue.append(neighbour)
visited.add(node)
line = infile.readline()
while line:
node1, node2, weight = line.strip().split()
if node1 not in adj_list:
adj_list[node1] = []
adj_list[node1].append((node2, weight))
else:
adj_list[node1].append((node2, weight))
if node2 not in adj_list:
adj_list[node2] = []
adj_list[node2].append((node1, weight))
else:
adj_list[node2].append((node1, weight))
line = infile.readline()
##print(adj_list)
bfs(adj_list)
##print(parents)
distance = calculate_distance(sat_start, sat_end, parents)
outfile.write(str(distance))
##print(distance)
infile.close()
outfile.close()