#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cassert>
using namespace std;
double eps=1e-8;
double t[400010],ta[400010],tb[400010],ans,xa[400010],ya[400010],xb[400010],yb[400010];
int n,m,tot;
double sqr(double x){return x*x;}
double dis(double x1,double y1,double x2,double y2){return sqrt(sqr(x2-x1)+sqr(y2-y1));}
double cal(double tl,double tr)
{
	if(abs(tl-tr)<eps){
		int l=1,r=n+1;
		for(;l<r-1;)
		{
			int mid=(l+r)>>1;
			if(ta[mid]<tr-eps)l=mid;
			else r=mid;
		}
		swap(l,r);int r1=r;
		l=1,r=m+1;
		for(;l<r-1;)
		{
			int mid=(l+r)>>1;
			if(tb[mid]<tr-eps)l=mid;
				else r=mid;
		}
		swap(l,r);
		//return 0x3f3f3f3f;
		//printf("%.5lf %.5lf %.5lf %.5lf\n",xa[r1],ya[r1],xb[r],yb[r]);
			return dis(xa[r1],ya[r1],xb[r],yb[r]);
		//return dis(xa[1],ya[1],xb[1],yb[1]);
	}
	//printf("tl=%Lf tr=%Lf\n",tl,tr);
	//int l=0,r=n+1;
	int l=1,r=n+1;
	for(;l<r-1;)
	{
		int mid=(l+r)>>1;
		if(ta[mid]<tr-eps)l=mid;
		else r=mid;
	}
	swap(l,r);
	double bx1=(xa[r+1]-xa[r])/(dis(xa[r],ya[r],xa[r+1],ya[r+1]));
	double ax1=xa[r]-ta[r]*bx1;
	double by1=(ya[r+1]-ya[r])/(dis(xa[r],ya[r],xa[r+1],ya[r+1]));
	double ay1=ya[r]-ta[r]*by1;
	//l=0,r=m+1;
	l=1,r=m+1;
	for(;l<r-1;)
	{
		int mid=(l+r)>>1;
		if(tb[mid]<tr-eps)l=mid;
		else r=mid;
	}
	swap(l,r);
	double bx2=(xb[r+1]-xb[r])/(dis(xb[r],yb[r],xb[r+1],yb[r+1]));
	double ax2=xb[r]-tb[r]*bx2;
	double by2=(yb[r+1]-yb[r])/(dis(xb[r],yb[r],xb[r+1],yb[r+1]));
	double ay2=yb[r]-tb[r]*by2;
	//printf("x1=%Lf+%Lft y1=%Lf+%Lft\n",ax1,bx1,ay1,by1);
	//printf("x2=%Lf+%Lft y2=%Lf+%Lft\n",ax2,bx2,ay2,by2);
	double a=sqr(bx2-bx1)+sqr(by2-by1),b=2*(bx2-bx1)*(ax2-ax1)+2*(by2-by1)*(ay2-ay1),c=sqr(ax2-ax1)+sqr(ay2-ay1);
	//printf("%lf %lf %lf\n",a,b,c);
	double tans=min(a*tl*tl+b*tl+c,a*tr*tr+b*tr+c);
	
	//printf("ans=%Lf\n\n",tans);
	//printf("%Lft^2+%Lft+%Lf\n",a,b,c);
	//if((abs(a)>eps)&&(tl-eps<-b/(2*a))&&(-b/(2*a)<tr+eps))tans=min(tans,a*sqr(-b/(2*a))+b*(-b/(2*a))+c);
	if((tl-eps<=-b/(2*a))&&(-b/(2*a)<=tr+eps))tans=min(tans,a*sqr(-b/(2*a))+b*(-b/(2*a))+c);
	tans=sqrt(abs(tans));
	//printf("ans=%Lf\n\n",tans);
	return tans;
}
int main()
{
	//freopen("K.in","r",stdin);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%lf%lf",&xa[i],&ya[i]);
		if(i==1)t[i]=0;
		else t[i]=t[i-1]+dis(xa[i-1],ya[i-1],xa[i],ya[i]);
		ta[i]=t[i];
	}
	scanf("%d",&m);
	for(int i=1;i<=m;i++)
	{
		scanf("%lf%lf",&xb[i],&yb[i]);
		if(i==1)t[i+n]=0;
		else t[i+n]=t[i+n-1]+dis(xb[i-1],yb[i-1],xb[i],yb[i]);
		tb[i]=t[i+n];
	}
	ans=dis(xa[1],ya[1],xb[1],yb[1]);
	tot=n+m;
	sort(t+1,t+tot+1);
	for(int i=1;i<tot;i++)
	if(t[i]>=ta[n])break;
	else if(t[i]>=tb[m])break;
	else ans=min(ans,cal(t[i],t[i+1]));
	//assert(ans>=0.0);
	printf("%.12lf\n",ans);
	return 0;
}
