from math import sqrt import heapq def dijkstra(s, h, graph): n = len(graph)-1 dist = [float("inf") for i in range(n+1)] dist[s] = 0 pq = [] heapq.heapify(pq) heapq.heappush(pq, (0, s)) while pq: mini_dis, node = heapq.heappop(pq) if dist[node] < mini_dis: continue for w, point in graph[node]: if dist[point] < w: continue newlen = dist[node]+w if newlen < dist[point]: heapq.heappush(pq, (newlen, point)) dist[point] = newlen return dist N,M = map(int,input().split()) X,Y = map(int,input().split()) l = [[] for _ in range(N+1)] d = [[] for _ in range(N+1)] for i in range(1,N+1): a,b = map(int,input().split()) d[i].append(a) d[i].append(b) for _ in range(M): a,b = map(int,input().split()) dist = sqrt((d[a][0]-d[b][0])**2 + (d[a][1]-d[b][1])**2) l[a].append((dist,b)) l[b].append((dist,a)) ans = dijkstra(X, Y, l) print(ans[Y])