## https://yukicoder.me/problems/no/1065 import heapq import math def main(): N, M = map(int, input().split()) X, Y = map(int, input().split()) X -= 1 Y -= 1 pq = [] for _ in range(N): p, q = map(int, input().split()) pq.append((p, q)) next_nodes = [[] for _ in range(N)] for _ in range(M): P, Q = map(int, input().split()) P -= 1 Q -= 1 p0, q0 = pq[P] p1, q1 = pq[Q] d = math.sqrt((p0 - p1) ** 2 + (q0 - q1) ** 2) next_nodes[P].append((Q, d)) next_nodes[Q].append((P, d)) seen = [float("inf") for _ in range(N)] fix = [float("inf") for _ in range(N)] seen[X] = 0.0 queue = [] heapq.heappush(queue, (0.0, X)) while len(queue) > 0: cost, v = heapq.heappop(queue) if fix[v] < float("inf"): continue fix[v] = cost for w, d in next_nodes[v]: if fix[w] < float("inf"): continue new_cost = d + cost if seen[w] > new_cost: seen[w] = new_cost heapq.heappush(queue, (new_cost, w)) print(fix[Y]) if __name__ == '__main__': main()