n, m = gets.to_s.split.map{|t| t.to_i } x, y = gets.to_s.split.map{|t| t.to_i - 1 } xys = Array.new(n){ gets.to_s.split.map{|t| t.to_i } } g = Array.new(n){ [] } m.times do s, t = gets.to_s.split.map{|t| t.to_i - 1 } g[s] << t g[t] << s end inf = Float::INFINITY d = [inf] * n d[x] = 0 q = [x] while ( v = q.shift ) d_v = d[v] g[v].each do |u| t = Math.hypot( xys[u][0] - xys[v][0], xys[u][1] - xys[v][1] ) if d[u] > d_v + t d[u] = d_v + t q.push u end end end puts d[y]