#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;
}