#include #include #include #include #include #include #include #include using namespace std; #define int long long #define endl "\n" constexpr long long INF = (long long)1e18; constexpr long long MOD = 1'000'000'007; struct fast_io { fast_io(){ std::cin.tie(nullptr); std::ios::sync_with_stdio(false); }; } fio; void dijkstra(int s, vector &d, vector>> &G){ priority_queue,vector>,greater>> q; d.clear(); d.resize(G.size(),INF); d[s] = 0; q.push(make_pair(0,s)); while(!q.empty()){ pair p = q.top();q.pop(); int v = p.second; if(d[v] < p.first) continue; for(pair e : G[v]){ if(d[e.first] > d[v] + e.second){ d[e.first] = d[v] + e.second; q.push(make_pair(d[e.first],e.first)); } } } } long double dis(vector> &p, int a, int b){ long double x = (p[a].first - p[b].first); long double y = (p[a].second - p[b].second); return sqrt(x * x + y * y); } signed main(){ cout<> p; vector>> G; vector d; cin>>N>>M; cin>>X>>Y; X--, Y--; p.resize(N); G.resize(N); for(int i = 0; i < N; i++){ cin>>p[i].first>>p[i].second; } for(int i = 0; i < M; i++){ int P, Q; cin>>P>>Q; P--, Q--; G[P].push_back({Q, dis(p, P, Q)}); G[Q].push_back({P, dis(p, P, Q)}); } dijkstra(X, d, G); cout<