#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define popcount __builtin_popcount using namespace std; typedef long long int ll; typedef pair P; int main() { int n, m; cin>>n>>m; int x, y; cin>>x>>y; x--; y--; double a[200020], b[200020]; for(int i=0; i>a[i]>>b[i]; using Pd=pair; vector g[200020]; for(int i=0; i>p>>q; p--; q--; double d=sqrt((a[p]-a[q])*(a[p]-a[q])+(b[p]-b[q])*(b[p]-b[q])); g[p].push_back({d, q}); g[q].push_back({d, p}); } priority_queue, greater> que; double d[200020]; const double INF=1e18; fill(d, d+n, INF); d[x]=0; que.push({0, x}); while(!que.empty()){ auto p=que.top(); que.pop(); int s=p.second; if(d[s]d[s]+q.first){ d[t]=d[s]+q.first; que.push({d[t], t}); } } } printf("%.12lf\n", d[y]); return 0; }