from itertools import *
n, m, c, r = map(int, input().split())
inf = 1_000_000_000_000_000_000
adj = [[] for i in range(n)]; res = [-1]*n
d = [[inf if j != i else 0 for j in range(n)] for i in range(n)]
for i in range(m):
	a, b, l = map(int, input().split())
	d[a-1][b-1] = l; d[b-1][a-1] = l
	adj[a-1].append(b-1); adj[b-1].append(a-1)
for i, j, k in product(range(n), range(n), range(n)):
	d[j][k] = min(d[j][k], d[j][i] + d[i][k])
def getReachable(i, c, reachable):
	if not reachable[i]:
		reachable[i] = True
		for j in (j for j in adj[i] if j != c): getReachable(j, -1, reachable)
def getAdj(c, r):
	ad = [i for i in adj[r] if d[c][r] == d[c][i] + d[i][r]][0]
	ra = [False]*n; getReachable(r, ad, ra)
	max_dist = max(d[r][j] for j in range(n) if ra[j])
	return [i for i in range(n) if ra[i] and d[r][i] == max_dist and i != r]
def dfs(c, r):
	if res[r] >= 0: return res[r]
	res[r] = inf
	res[r] = max([0] + [d[r][i]+dfs(r,i) for i in getAdj(c, r)])
	return res[r]
print(d[c-1][r-1]+dfs(c-1,r-1) if dfs(c-1,r-1) < inf else "impossible")
