#include<bits/stdc++.h>
#define forn(i, n) for(int i = 0; i < n; i++)
using namespace std;
typedef long double ld;
const ld E = 1E-6;
struct pnt{
	ld x, y;
	pnt(){}
	pnt(ld x, ld y) : x(x), y(y) {}
	bool operator<(const pnt &b){
		return (abs(x - b.x) > E)? x < b.x : y < b.y;
	}
	pnt operator+(const pnt &b){
		return pnt(x + b.x, y + b.y);
	}
	pnt operator-(const pnt &b){
		return pnt(x - b.x, y - b.y);
	}
	pnt operator*(ld a){
		return pnt(a * x, a * y);
	}
	ld operator%(const pnt &b){
		return x * b.y - b.x * y;
	}
};
struct line{
	pnt p, v; //(x, y) = p + t * v
	line(){}
	line(pnt a, pnt b){
		v = b - a;
		p = b;
	}
	pnt operator*(line b) { //Intersección (Antes de debe comprobar de que se intersectan)
		pnt c = p - b.p, d = b.v - v; //d = (d.x * t, d.y * t)
		ld t = (b.v.y * (p.x - b.p.x) - (p.y - b.p.y) * b.v.x) / (v.y * b.v.x - b.v.y * v.x);
		//cout<<"El t es: "<<t<<"\n";
		return p + (v * t);
	}
};
ld direction(pnt a, pnt b, pnt c){
	a = b - a;
	b = c - b;
	return a % b;
}
ld area(vector<pnt> &poly){
	int n = poly.size() - 1;
	ld ret = 0;
	//poly.push_back(poly[0]);
	forn(i, n){
		//cout<<poly[i].x<<" "<<poly[i].y<<"\n";
		ret += poly[i] % poly[i + 1];
	}
	return abs(ret) / 2;
}
int main(){
	int n, q;
	pnt aux;
	cin>>n;
	vector<pnt> poly(n);
	forn(i, n) cin>>poly[i].x>>poly[i].y;
	poly.push_back(poly[0]);
	//aux = line(pnt(0, 2), pnt(7, 4)) * line(pnt(1, 5), pnt(5, 1));
	//cout<<aux.x<<" "<<aux.y<<"\n";
	cin>>q;
	while(q--){
		pnt a, b;
		vector<pnt> res;
		cin>>a.x>>a.y>>b.x>>b.y;
		forn(i, n){
			ld v = direction(a, b, poly[i]);
			ld w = direction(a, b, poly[i + 1]);
			//cout<<i<<" "<<v<<" "<<w<<"\n";
			//Tres casos posibles
			if(v >= 0 && w >= 0){ //Si ambos están dentro
				//cout<<i<<" Ambos dentro\n";
				res.push_back(poly[i]);
			} else if(v >= 0 && w < 0){ //Si el primero está adentro y el siguiente afuera
				//cout<<i<<" Primero dentro\n";
				res.push_back(poly[i]);
				aux = line(poly[i], poly[i + 1]) * line(a, b);
				//cout<<aux.x<<" "<<aux.y<<"\n";
				res.push_back(aux);
			} else if(v < 0 && w >= 0){ //Si el primero está afuera y el siguiente adentro
				//cout<<i<<" Segundo dentro\n";
				aux = line(poly[i], poly[i + 1]) * line(a, b);
				//cout<<aux.x<<" "<<aux.y<<"\n";
				res.push_back(aux);
			} else{
				//cout<<i<<" Ambos fuera\n";
			}
		}
		if(!res.size()){
			cout<<fixed<<setprecision(8)<<0.0<<"\n";
			continue;
		}
		res.push_back(res[0]);
		cout<<fixed<<setprecision(8)<<area(res)<<"\n";
	}
	return 0;
}
