#include <bits/stdc++.h>
#define rep(i,n) for(int i=1;i<=n;++i)
#define N 100005
using namespace std;
struct poi{
	double x,y;
	poi operator +(poi t){return (poi){x+t.x,y+t.y};}
	poi operator -(poi t){return (poi){x-t.x,y-t.y};}
	poi operator *(double t){return (poi){x*t,y*t};}
}a[N],b[N],po1,po2;
double sqr(double x){return x*x;}
double dis(poi x){return sqrt(sqr(x.x)+sqr(x.y));}
double cross(poi x,poi y){return x.x*y.y-x.y*y.x;}
double pt(poi x,poi y){return x.x*y.x+x.y*y.y;}
double linedis(poi x,poi y){
	if(pt(x,y-x)>=0)return dis(x);
	if(pt(y,x-y)>=0)return dis(y);
	return abs(cross(x,y))/dis(y-x);
}
int n,m;
int main(){
	scanf("%d",&n);rep(i,n)scanf("%lf%lf",&a[i].x,&a[i].y);
	scanf("%d",&m);rep(i,m)scanf("%lf%lf",&b[i].x,&b[i].y);
	po1=a[1],po2=b[1];int p1=1,p2=1;double ans=2e8;
	for(;p1!=n&&p2!=m;){
		double ta=dis(a[p1+1]-po1),tb=dis(b[p2+1]-po2);
		if(ta<tb){
			poi p=(b[p2+1]*(ta/tb)+po2*(1-ta/tb));
			ans=min(ans,linedis(po2-po1,p-a[p1+1]));
			po2=p,po1=a[++p1];
		}else{
			poi p=(a[p1+1]*(tb/ta)+po1*(1-tb/ta));
			ans=min(ans,linedis(po2-po1,b[p2+1]-p));
			po1=p,po2=b[++p2];
		}
	}
	printf("%.15lf\n",ans);
	return 0;
}