from heapq import heappop, heappush N, M = map(int, input().split()) X, Y = map(int, input().split()) pq = [list(map(int, input().split())) for _ in range(N)] PQ = [list(map(int, input().split())) for _ in range(M)] G = [[] for _ in range(N)] for i in range(M): a, b = PQ[i] a -= 1 b -= 1 d = ((pq[a][0]-pq[b][0])**2 + (pq[a][1]-pq[b][1])**2)**0.5 G[a].append((b, d)) G[b].append((a, d)) dist = [float('inf')] * N dist[X-1] = 0 # dijkstra def dijkstra(s, g): que = [] heappush(que, (0, s)) while que: cost, now = heappop(que) if dist[now] < cost: continue for nxt, d in G[now]: if nxt == now: continue nxt_cost = dist[now] + d if nxt_cost < dist[nxt]: dist[nxt] = nxt_cost heappush(que, (nxt_cost, nxt)) return dist[g] ans = dijkstra(X-1, Y-1) print(ans)