/*
TASK:area
LANG:C++
*/
#include <iostream>
#include <string>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <iomanip>
using namespace std;
class Point
{
public:
double x,y;
 
 void GetPoint()
 {
 
 cin>>x>>y;
      
  }
   
 void init(double p, double q)
 {
        x=p;
        y=q;
        
 }
 
  
      
};
class Line
{
    public:
        Point a,b;
    void GetLine()
    {
        a.GetPoint();
        b.GetPoint();
    }
    void init(double q,double w,double r,double e)
    {
        a.init(q,w);
        b.init(r,e);
        
    }
};


double Orient(Line P,Point Q)
{
double A=P.a.y-P.b.y;
double B=P.b.x-P.a.x;
double C=P.a.x*P.b.y-P.b.x*P.a.y;
return A*Q.x+B*Q.y+C;   

}

Point T;
vector <Point> Q;
vector <Line> V;
vector <Point> res;
Point::Point XXX(Line P,Line R)
 {
        //cout<<"("<<P.a.x<<" , "<<P.a.y<<")"<<"("<<P.b.x<<" , "<<P.b.y<<")"<<"("<<R.a.x<<" , "<<R.a.y<<")"<<"("<<R.b.x<<" , "<<R.b.y<<")"<<" ->  ";

double A1=(P.a.y)-(P.b.y);
double B1=(P.b.x)-(P.a.x);
double C1=(P.a.x)*(P.b.y)-(P.b.x)*(P.a.y);

double A2=(R.a.y)-(R.b.y);
double B2=(R.b.x)-(R.a.x);
double C2=(R.a.x)*(R.b.y)-(R.b.x)*(R.a.y);
Point res;
if(A1/A2==B1/B2){return Q[Q.size()-1];}
else
if(A1!=0)
{

res.y=(A2*C1-A1*C2)/(A1*B2-A2*B1);
res.x=(-B1*res.y-C1)/A1;

}
else
if(B1!=0)
{
Point res;
 res.y=-C1/B1;
 res.x=(-C2-B2*res.y)/A2;
    
}
//cout<<fixed<<res.x<<" "<<fixed<<res.y<<endl;
return res;
}

bool check(int pos)
{
    int i;
    //if(Q[pos].x<0||Q[pos].y<0)return false;
    for(i=0;i<V.size();i++)
    {
        if(Orient(V[i],Q[pos])*Orient(V[i],T)<(double)0)return false;
    }
    return true;
}
bool cmp(Point A,Point B)
{
    return atan2(A.y-T.y,A.x-T.x)<atan2(B.y-T.y,B.x-T.x);
    
}
bool cmp1(Point I,Point O)
{
    if(I.x==O.x)return I.y<O.y;
    return I.x<O.x;
    
}
void solve()
{
    double x1,y1,x2,y2;
     
     cin>>x1>>y1>>x2>>y2;
     T.GetPoint();
     Line F;
     Point u;
     F.init(x1,y1,x1,y2);u.init(x1,y1);Q.push_back(u);u.init(x1,y2);Q.push_back(u);
     V.push_back(F);
//cout<<F.a.x<<" "<<F.a.y<<" "<<F.b.x<<" "<<F.b.y<<endl;    
     F.init(x2,y1,x2,y2);u.init(x2,y1);Q.push_back(u);u.init(x2,y2);Q.push_back(u);
     V.push_back(F);
//cout<<F.a.x<<" "<<F.a.y<<" "<<F.b.x<<" "<<F.b.y<<endl;    
    
     F.init(x1,y1,x2,y1);u.init(x1,y1);Q.push_back(u);u.init(x2,y1);Q.push_back(u);
     V.push_back(F);
//cout<<F.a.x<<" "<<F.a.y<<" "<<F.b.x<<" "<<F.b.y<<endl;    
    
     F.init(x1,y2,x2,y2);u.init(x1,y2);Q.push_back(u);u.init(x2,y2);Q.push_back(u);
     V.push_back(F);
//cout<<F.a.x<<" "<<F.a.y<<" "<<F.b.x<<" "<<F.b.y<<endl;    
   
 int n,j,i;
 cin>>n;

 for(i=0;i<n;i++)
 {
        F.GetLine();
        V.push_back(F);
        for(j=0;j<V.size()-1;j++)
        Q.push_back(XXX(V[j],F));
 
 }   
 
 for(i=0;i<Q.size();i++)
 {
        
if(check(i))res.push_back(Q[i]);
 }
 
 sort(res.begin(),res.end(),cmp1);
 vector<Point>RES;
 RES.push_back(res[0]);
 for(i=1;i<res.size();i++)
 if(res[i].x!=res[i-1].x||res[i].y!=res[i-1].y)RES.push_back(res[i]);
 double S=0;
 sort(RES.begin(),RES.end(),cmp);
 //for(i=0;i<RES.size();i++)
//cout<<RES[i].x<<" <-> "<<RES[i].y<<endl;
 for(i=1;i<RES.size()-1;i++)
 {
S+=RES[i].x*(RES[i+1].y-RES[i-1].y);        
}
S+=RES[0].x*(RES[1].y-RES[RES.size()-1].y);
S+=res[RES.size()-1].x*(RES[0].y-RES[res.size()-2].y);
    
    S/=2;
    S=fabs(S);
    cout<<S<<endl;
    // cout<<fixed<<setprecision(0)<<S<<endl;

}

int main()
{


    solve();
    return 0;

}
