#include using namespace std; typedef long long ll; typedef long double ld; typedef pair P; typedef pair Pi; #define rep(i,n) for(ll i=0;i inline bool chmax(T &a, T b){if(a inline bool chmin(T &a, T b){if(a>b){a=b;return true;}return false;} template ostream& operator<<(ostream& s,const complex& d) {return s<<"("< ostream& operator<<(ostream& s,const pair& d) {return s<<"("< ostream& operator<<(ostream& s, const vector& d){int len=d.size();rep(i,len){s< ostream& operator<<(ostream& s,const vector>& d){int len=d.size();rep(i,len){s< ostream& operator<<(ostream& s,const set& v){s<<"{ ";for(auto itr=v.begin();itr!=v.end();++itr) {if (itr!=v.begin()) {s<< ", ";}s<<(*itr);}s<<" }";return s;} template ostream& operator<<(ostream& s,const multiset& v){s<<"{ ";for(auto itr=v.begin();itr!=v.end();++itr) {if (itr!=v.begin()) {s<< ", ";}s<<(*itr);}s<<" }";return s;} template ostream& operator<<(ostream& s,const map& m){s<<"{"<>n>>m; int x,y; cin>>x>>y; x--,y--; vector p(n),q(n); rep(i,n){ cin>>p[i]>>q[i]; } auto calc=[&](pair a,pair b){ return sqrt((a.fi-b.fi)*(a.fi-b.fi)+(a.se-b.se)*(a.se-b.se)); }; vector> g(n); rep(i,m){ int u,v; cin>>u>>v; u--,v--; double d=calc(pair(p[u],q[u]),pair(p[v],q[v])); g[u].push_back({v,d}); g[v].push_back({u,d}); } auto dijkstra=[&](int st,int en){ priority_queue,vector>,greater>> que; vector dist(n,inf); vector pre(n); dist[st]=0; que.push({0,st}); while(!que.empty()){ auto hoge=que.top(); que.pop(); int v=hoge.se; double d=hoge.fi; if(dist[v]