#include<fstream>
using namespace std;
ifstream fin("reuniune.in");
ofstream fout("reuniune.out");
struct Point
{
long long x,y;
void insert(int a,int b)
{
x=a;
y=b;
}
};
struct Dr
{
Point Ld,Lu,Rd,Ru;
void setx(int xl,int xr)
{
Ld.x=Lu.x=xl;
Rd.x=Ru.x=xr;
}
void sety(int yd,int yu)
{
Ld.y=Rd.y=yd;
Lu.y=Ru.y=yu;
}
}v[7];
bool use[7][7];
void intersectie(Dr a,Dr b,int i,int j,Dr &loc)
{
v[4]=loc;
use[i][j]=use[j][i]=1;
//b inclus in a
if(a.Lu.x<=b.Lu.x && b.Ru.x<=a.Ru.x)
{
loc.setx(b.Lu.x,b.Ru.x);
if(b.Lu.y<=a.Lu.y && b.Lu.y>=a.Ld.y)
{
if(a.Ld.y<=b.Ld.y)
loc.sety(b.Ld.y,b.Lu.y);
else
loc.sety(a.Ld.y,b.Lu.y);
}
if(b.Lu.y>a.Lu.y && b.Ld.y<=a.Lu.y)
{
if(a.Ld.y<=b.Ld.y)
loc.sety(b.Ld.y,a.Lu.y);
else
loc.sety(a.Ld.y,a.Lu.y);
}
return;
}
//b inclus partial, iese in stanga
if(a.Lu.x>b.Lu.x && b.Ru.x<=a.Ru.x && b.Ru.x>=a.Lu.x)
{
loc.setx(a.Lu.x,b.Ru.x);
if(b.Lu.y<=a.Lu.y && b.Lu.y>=a.Ld.y)
{
if(a.Ld.y<=b.Ld.y)
loc.sety(b.Ld.y,b.Lu.y);
else
loc.sety(a.Ld.y,b.Lu.y);
}
if(b.Lu.y>a.Lu.y && b.Ld.y<=a.Lu.y)
{
if(a.Ld.y<=b.Ld.y)
loc.sety(b.Ld.y,a.Lu.y);
else
loc.sety(a.Ld.y,a.Lu.y);
}
return;
}
//b inclus partial, iese in dreapta
if(a.Lu.x<=b.Lu.x && b.Ru.x>a.Ru.x && b.Lu.x<=a.Ru.x)
{
loc.setx(b.Lu.x,a.Ru.x);
if(b.Lu.y<=a.Lu.y && b.Lu.y>=a.Ld.y)
{
if(a.Ld.y<=b.Ld.y)
loc.sety(b.Ld.y,b.Lu.y);
else
loc.sety(a.Ld.y,b.Lu.y);
}
if(b.Lu.y>a.Lu.y && b.Ld.y<=a.Lu.y)
{
if(a.Ld.y<=b.Ld.y)
loc.sety(b.Ld.y,a.Lu.y);
else
loc.sety(a.Ld.y,a.Lu.y);
}
return;
}
//posibil a inclus complet in b
if(b.Lu.x<a.Lu.x && b.Ru.x>a.Ru.x)
return intersectie(b,a,j,i,loc);
use[i][j]=use[j][i]=0;
}
long long perimetru,arie,sw;
int main()
{
for(int i=1,xd,yd,xu,yu;i<=3;i++)
{
fin>>xd>>yd>>xu>>yu;
v[i].Ld.insert(xd,yd);
v[i].Lu.insert(xd,yu);
v[i].Rd.insert(xu,yd);
v[i].Ru.insert(xu,yu);
arie+=(yu-yd)*(xu-xd);
}
for(int i=1;i<=2;i++)
for(int j=i+1;j<=3;j++)
{
intersectie(v[i],v[j],i,j,v[5]);
if(use[i][j])
{
//perimetru-=(2*((v[5].Ru.x-v[5].Lu.x)+(v[5].Ru.y-v[5].Rd.y)));
arie-=(v[5].Ru.x-v[5].Lu.x)*(v[5].Ru.y-v[5].Rd.y);
sw++;
}
}
if(sw>1)
{
intersectie(v[4],v[5],4,5,v[6]);
arie+=(v[6].Ru.x-v[6].Lu.x)*(v[6].Ru.y-v[6].Rd.y);
long long minx=(1<<30),maxx=-(1<<30),miny=(1<<30),maxy=-(1<<30);
for(int i=1;i<=3;i++)
{
minx=min(minx,v[i].Lu.x);
maxx=max(maxx,v[i].Ru.x);
miny=min(miny,v[i].Ld.y);
maxy=max(maxy,v[i].Lu.y);
}
perimetru=1LL*2*((maxx-minx)+(maxy-miny));
}
if(sw==1)
{
int Xor=0;
long long minx=(1<<30),maxx=-(1<<30),miny=(1<<30),maxy=-(1<<30);
for(int i=1;i<=2;i++)
for(int j=i+1;j<=3;j++)
if(use[i][j])
{
minx=min(minx,v[i].Lu.x);
maxx=max(maxx,v[i].Ru.x);
miny=min(miny,v[i].Ld.y);
maxy=max(maxy,v[i].Lu.y);
minx=min(minx,v[j].Lu.x);
maxx=max(maxx,v[j].Ru.x);
miny=min(miny,v[j].Ld.y);
maxy=max(maxy,v[j].Lu.y);
perimetru=1LL*2*((maxx-minx)+(maxy-miny));
Xor=i^j;
}
perimetru+=1LL*2*((v[Xor].Ru.x-v[Xor].Lu.x)+(v[Xor].Ru.y-v[Xor].Rd.y));
}
if(sw==0)
for(int i=1;i<=3;i++)
perimetru+=1LL*2*((v[i].Ru.x-v[i].Lu.x)+(v[i].Ru.y-v[i].Rd.y));
fout<<arie<<' '<<perimetru;
return 0;
}