#include<iostream>
#include <cmath>
#include<cstdio>
#include <bits/stdc++.h>
#define N 101
#define _for(i,a,b)? for(int i=(a);i<=(b);i++)
using namespace std;
struct point {
int x,y;
}p[N];
double g[N][N];
int main()
{
int n,i,j,k,m,a,b,s,t;
cin>>n; //n個(gè)點(diǎn)
_for(i,1,n)
? cin>>p[i].x>>p[i].y;
?
? _for(i,1,n)? //初始化圖數(shù)組
? ? _for(j,1,n) {
? ? if(i==j)? g[i][j]=0;
? ? else g[i][j]=999999999;
? }
?
cin>>m;//m條邊
_for(i,1,m) {
cin>>a>>b; //a,b兩個(gè)點(diǎn)之間有直接關(guān)系
int d;
d=(p[a].x-p[b].x)*(p[a].x-p[b].x)+(p[a].y-p[b].y)*(p[a].y-p[b].y);
g[a][b]=g[b][a]=sqrt(d); //建立圖關(guān)系
}
// _for(i,1,n) {? //輸出 圖數(shù)組
// ? ? _for(j,1,n) {
// ? ? cout<<g[i][j]<<"? ? ? ";
// ? ? }
// ? ? cout<<endl;
// }
//應(yīng)用弗洛伊德算法
?
cin>>s>>t; //輸入原點(diǎn)s,目標(biāo)點(diǎn)t
_for(k,1,n)
? _for(i,1,n)
? ? ? _for(j,1,n)
? ? ? ? if(g[i][j]>g[i][k]+g[k][j])
? ? ? ? ? g[i][j]=g[i][k]+g[k][j];
printf("%.2lf",g[s][t]);
return 0;
}