/*
TASK:area
LANG:C++
*/
/*This space for rent*/
#include<stdio.h>
#include<vector>

using namespace std;
vector<pair<double,double> > p;
vector<pair<double,double> > o;
pair<double,double> tmp,grr,otgovor;
int x1,y1,x2,y2,x,y,n,xt,yt,size,h,osize;

double dett()
{
double vv=0;
vv+=o[0].first*o[1].second;
vv+=o[1].first*yt;
vv+=xt*o[0].second;
vv-=o[0].first*yt;
vv-=o[1].first*o[0].second;
vv-=xt*o[1].second;
return vv;
}

double detx()
{
double vv=0;
vv+=o[0].first*o[1].second;
vv+=o[1].first*p[h].second;
vv+=p[h].first*o[0].second;
vv-=o[0].first*p[h].second;
vv-=o[1].first*o[0].second;
vv-=p[h].first*o[1].second;
return vv;
}

void input()
{
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
scanf("%d%d",&xt,&yt);
tmp.first=x1;
tmp.second=y1;
p.push_back(tmp);
tmp.first=x1;
tmp.second=y2;
p.push_back(tmp);
tmp.first=x2;
tmp.second=y1;
p.push_back(tmp);
tmp.first=x2;
tmp.second=y2;
p.push_back(tmp);
size=4;
tmp.first=0;
tmp.second=0;
for(x=0;x<400;x++)
p.push_back(tmp);
o.push_back(tmp);
o.push_back(tmp);
o.push_back(tmp);
return;
}

void calc()
{
double a1=0,b1=0,a2=0,b2=0;
int mini=0;

for(x=1;x<size;x++)
{
if(p[x].first==p[mini].first)
   if(p[x].second<p[mini].second)
                                           mini=x;
if(p[x].first<p[mini].first)
                                      mini=x;
}
grr.first=p[mini].first;
grr.second=p[mini].second;
for(x=mini;x+1<size;x++)
                                 {
                                 p[x].first=p[x+1].first;
                                 p[x].second=p[x+1].second;
                                 }

for(x=0;x<size-1;x++)
{
mini=x;
for(y=x+1;y<size-1;y++) //edited !
if( (p[y].second-grr.second)*(p[mini].first-grr.first) < (p[mini].second-grr.second)*(p[y].first-grr.first) )
mini=y;

if(mini>x)
          {
          tmp.first=p[x].first;
          tmp.second=p[x].second;
          p[x].first=p[mini].first;
          p[x].second=p[mini].second;
          p[mini].first=tmp.first;
          p[mini].second=tmp.second;
          }
}
//dotuk otsechkite sa gotovi

a1=(y2-y1);
a1/=(x2-x1);
b1=y1-a1*x1;
p[size-1].first=grr.first;
p[size-1].second=grr.second;

#define least(a,b) (a<b?a:b)
#define most(a,b) (a>b?a:b)
for(x=0;x<size;x++)
                   {
                   a2=(p[x].second-p[(x+1)%size].second);//!!!
                   if(p[x].first-p[(x+1)%size].first!=0)
                      {
                      a2/=(p[x].first-p[(x+1)%size].first);
                      b2=p[x].second-a2*p[x].first;
                      otgovor.first=b2-b1;
                      otgovor.first/=a1-a2;
                      otgovor.second=a1*otgovor.first+b1;
                      }
                   else
                       {
                       otgovor.first=p[x].first;
                       otgovor.second=a1*otgovor.first+b1;
                       }
                   if(otgovor.first+0.0001>=least(p[x].first,p[(x+1)%size].first)&&otgovor.first-0.0001<=most(p[x].first,p[(x+1)%size].first))
                   if(otgovor.second+0.0001>=least(p[x].second,p[(x+1)%size].second)&&otgovor.second-0.0001<=most(p[x].second,p[(x+1)%size].second))
                         {
                         if(osize==0)
                                    {
                                    o[0].first=otgovor.first;
                                    o[0].second=otgovor.second;
                                    osize++;
                                    }
                         else if(osize==1)
                              if((otgovor.first-o[0].first>0.00001||otgovor.first-o[0].first<-0.00001)||(otgovor.second-o[0].second>0.00001||otgovor.second-o[0].second<-0.00001))
                                 {
                                 o[1].first=otgovor.first;
                                 o[1].second=otgovor.second;
                                 osize++;
                                 }
                         }
                   }
return;
}

void remove_points()
{
double a,c;
int b,d;
bool remove[100]={0};
a=dett();
if(a>0)b=1;
else if(a<0)b=-1;
else b=0;

for(h=0;h<size;h++)
   {
   c=detx();
   if(c>0)d=1;
   else if(c<0)d=-1;
   else d=0;
   if( d != b )
       remove[h]=1;
   }

for(int x=0;x<size;x++)
if(remove[x]==1)
                {
                for(y=x;y+1<size;y++)
                                     {
                                     p[y].first=p[y+1].first;
                                     p[y].second=p[y+1].second;
                                     remove[y]=remove[y+1];
                                     }
                x--;
                size--;
                }
return;
}

void area()
{
double a1=0,b1=0,a2=0,b2=0,otgovor=0;
int mini=0;

for(x=1;x<size;x++)
{
if(p[x].first==p[mini].first)
   if(p[x].second<p[mini].second)
                                           mini=x;
if(p[x].first<p[mini].first)
                                      mini=x;
}
grr.first=p[mini].first;
grr.second=p[mini].second;
for(x=mini;x+1<size;x++)
                                 {
                                 p[x].first=p[x+1].first;
                                 p[x].second=p[x+1].second;
                                 }

for(x=0;x<size-1;x++)
{
mini=x;
for(y=x+1;y<size-1;y++) //edited !
if( (p[y].second-grr.second)*(p[mini].first-grr.first) < (p[mini].second-grr.second)*(p[y].first-grr.first) )
mini=y;

if(mini>x)
          {
          tmp.first=p[x].first;
          tmp.second=p[x].second;
          p[x].first=p[mini].first;
          p[x].second=p[mini].second;
          p[mini].first=tmp.first;
          p[mini].second=tmp.second;
          }
}
p[size-1].first=grr.first;
p[size-1].second=grr.second;

double lice=0;
for(x=0;x<size;x++)
{
lice+=p[x].first*p[(x+1)%size].second;
lice+=p[(x+1)%size].first*yt;
lice+=xt*p[x].second;
lice-=p[x].first*yt;
lice-=p[(x+1)%size].first*p[x].second;
lice-=xt*p[(x+1)%size].second;
}

lice/=2;
int lice2=0;
lice2=lice;
printf("%d\n",lice2);
return;
}


void special()
{
double a1=0,b1=0,a2=0,b2=0;
int mini=0;

for(x=1;x<size;x++)
{
if(p[x].first==p[mini].first)
   if(p[x].second<p[mini].second)
                                           mini=x;
if(p[x].first<p[mini].first)
                                      mini=x;
}
grr.first=p[mini].first;
grr.second=p[mini].second;
for(x=mini;x+1<size;x++)
                                 {
                                 p[x].first=p[x+1].first;
                                 p[x].second=p[x+1].second;
                                 }

for(x=0;x<size-1;x++)
{
mini=x;
for(y=x+1;y<size-1;y++) //edited !
if( (p[y].second-grr.second)*(p[mini].first-grr.first) < (p[mini].second-grr.second)*(p[y].first-grr.first) )
mini=y;

if(mini>x)
          {
          tmp.first=p[x].first;
          tmp.second=p[x].second;
          p[x].first=p[mini].first;
          p[x].second=p[mini].second;
          p[mini].first=tmp.first;
          p[mini].second=tmp.second;
          }
}
//dotuk otsechkite sa gotovi

p[size-1].first=grr.first;
p[size-1].second=grr.second;

for(int x=0;x<size;x++)
if(least(p[x].first,p[(x+1)%size].first)<=x1)
if(most(p[x].first,p[(x+1)%size].first)>=x2)
{
if(p[x].first==p[(x+1)%size].first)
                                   {
                                   o[0].first=x1;
                                   o[0].second=p[x].first;
                                   o[1].first=x2;
                                   o[1].second=p[(x+1)%size].first;
                                   }
else
    {
    a1=p[x].second-p[(x+1)%size].second;
    a1/=p[x].first-p[(x+1)%size].first;
    b1=p[x].second-a1*p[x].first;
    otgovor.first=x1;
    otgovor.second=a1*x1+b1;
                   if(otgovor.first+0.0001>=least(p[x].first,p[(x+1)%size].first)&&otgovor.first-0.0001<=most(p[x].first,p[(x+1)%size].first))
                   if(otgovor.second+0.0001>=least(p[x].second,p[(x+1)%size].second)&&otgovor.second-0.0001<=most(p[x].second,p[(x+1)%size].second))
                         {
                         if(osize==0)
                                    {
                                    o[0].first=otgovor.first;
                                    o[0].second=otgovor.second;
                                    osize++;
                                    }
                         else if(osize==1)
                              if((otgovor.first-o[0].first>0.00001||otgovor.first-o[0].first<-0.00001)||(otgovor.second-o[0].second>0.00001||otgovor.second-o[0].second<-0.00001))
                                 {
                                 o[1].first=otgovor.first;
                                 o[1].second=otgovor.second;
                                 osize++;
                                 }
                         }
    }
}
double a=0,b=0;
int c=0,d=0;
bool remove[100]={0};
a=xt-x1;
if(a>0)b=1;
else if(a<0)b=-1;
else b=0;
for(h=0;h<size;h++)
   {
   c=p[h].first-x1;
   if(c>0)d=1;
   else if(c<0)d=-1;
   else d=0;
   if( d != b )
       remove[h]=1;
   }

for(int x=0;x<size;x++)
if(remove[x]==1)
                {
                for(y=x;y+1<size;y++)
                                     {
                                     p[y].first=p[y+1].first;
                                     p[y].second=p[y+1].second;
                                     remove[y]=remove[y+1];
                                     }
                x--;
                size--;
                }


return;
}


int main()
{
//freopen("area.in","rt",stdin);
/* T3h Sexiest Code Ever */
input();
scanf("%d",&n);
for(int a=0;a<n;a++)
{
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);

if(x1==x2)
          {
          special();
          if(osize==2)
          {
          x=0;
          while(x<osize)
                        {
                        p[size++]=o[x++];
                        }
          osize=0;
          }
          }
else
    {
    calc();
    if(osize==2)
    {
    remove_points();
    x=0;
    while(x<osize)
                 {
                 p[size++]=o[x++];
                 }
    osize=0;
    }
    }
}
area();
return 0;
}

