← Home
#include<bits/stdc++.h>
#define mkp make_pair
using namespace std;
const int N=(1<<20)+10;
using ll=long long;
using ld=double;
struct P{
	ll x,y;
	bool operator<(const P &z)
	const{return x==z.x?y<z.y:x<z.x;}
	ll operator*(const P &z)
	const{return x*z.y-y*z.x;}
	P operator-(const P &z)
	const{return{x-z.x,y-z.y};}
	P operator+(const P &z)
	const{return{x+z.x,y+z.y};}
	void rd(){cin>>x>>y;}
	ld operator&(const P &z)const{
		return sqrtl(ld(x-z.x)*(x-z.x)+ld(y-z.y)*(y-z.y));
	}
	ld dc(){return sqrtl(ld(x)*x+ld(y)*y);}
}d[N],K1,K2;
int T,n,lb,rb;
bool ck(const P &x,int l){return (x-d[l])*(d[(l+1)%n]-d[l])>=0;}
pair<int,int>sol(P at){
	auto sol1=[&](){
		if(ck(at,lb))return lb;
		if(ck(at,rb))return rb;
		if(ck(at,(lb+n-1)%n))return(lb+n-1)%n;
		if(ck(at,(rb+n-1)%n))return (rb+n-1)%n;
		int l,r,md;
		if((at-d[lb])*(d[rb]-d[lb])>0){
			l=lb,r=rb;
			if(r<l)r+=n;
			while(l<=r){
				md=l+r>>1;
				if(ck(at,md%n))return md%n;
				if(at.x<d[md%n].x)r=md-1;
				else l=md+1;
			}
		}else{
			l=rb,r=lb;
			if(r<l)r+=n;
			while(l<=r){
				md=l+r>>1;
				if(ck(at,md%n))return md%n;
				if(at.x>d[md%n].x)r=md-1;
				else l=md+1;
			}
		}return -1;
	};
	auto sol2=[&](){
		if(!ck(at,lb))return lb;
		if(!ck(at,(lb+n-1)%n))return (lb+n-1)%n;
		if(!ck(at,rb))return rb;
		return (rb+n-1)%n;
	};
	int t1=sol1(),t2=sol2(),l,r,md,k1,k2;
	l=t1,r=t2;
	if(r<l)r+=n;
	while(l<r){
		md=l+r>>1;
		if(ck(at,md%n))l=md+1;
		else r=md;
	}k1=l%n,l=t2,r=t1;
	if(r<l)r+=n;
	while(l<r){
		md=l+r>>1;
		if(ck(at,md%n))r=md;
		else l=md+1;
	}k2=l%n;
	return mkp(k1,k2);
}
int ck1(P a,P b,P c){return b*a>0&&a*c>0;}
ld ck2(P a,P b,P c,P d){
	b=b-a,d=d-c;
	if(!(b*d)){
		if((c-a)*b)return 1e64;
		return a&c;
	}
	ld p=ld((c-a)*d)/(b*d),q=ld((a-c)*b)/(d*b);
	return abs(p)*b.dc()+abs(q)*d.dc();
}
int main(){
    ios::sync_with_stdio(false),cin.tie(0);
    int i,j,k,l,r,x,y,z,d1,d2;
	cin>>n;
	for(x=0;x<n;++x)cin>>d[x].x>>d[x].y;
	lb=min_element(d,d+n)-d;
	rb=max_element(d,d+n)-d;
	for(cin>>T;T--;){
		cin>>K1.x>>K1.y>>K2.x>>K2.y;
		auto p=sol(K1),q=sol(K2);
		if(ck1(K2-K1,d[p.first]-K1,d[p.second]-K1)&&ck1(K1-K2,d[q.first]-K2,d[q.second]-K2)){
			ld ans=min(ck2(K1,d[p.first],K2,d[q.second]),ck2(K1,d[p.second],K2,d[q.first]));
			if(ans>1e20)puts("-1");
			else printf("%.12lf\n",ans);
		}
		else printf("%.12lf\n",K1&K2);
	}return 0;
}