#include <bits/stdc++.h>
struct Point{
int x;
int y;
};
struct Segment{
Point A;
Point B;
};
Segment D1,D2,D3;
inline long long myabs(long long x){
if(x<0)
x=-x;
return x;
}
inline long long aria(Segment d){
return 1LL*myabs(d.A.x-d.B.x)*myabs(d.A.y-d.B.y);
}
inline long long perim(Segment d){
return myabs(d.A.x-d.B.x)+myabs(d.A.y-d.B.y);
}
inline void myswap(Segment d){
int aux;
if(d.A.x>d.B.x){
aux=d.A.x;
d.A.x=d.B.x;
d.B.x=aux;
}
if(d.A.y>d.B.y){
aux=d.A.y;
d.A.y=d.B.y;
d.B.y=aux;
}
}
inline bool ok(Segment d1,Segment d2){
return std::min(d2.B.x,d1.B.x)>=std::max(d1.A.x,d2.A.x)&&std::min(d2.B.y,d1.B.y)>=std::max(d1.A.y,d2.A.y);
}
inline Segment intersect(Segment d1,Segment d2){
Segment d;
if(ok(d1,d2)){
d.A.x=std::max(d1.A.x,d2.A.x);
d.A.y=std::max(d1.A.y,d2.A.y);
d.B.x=std::min(d2.B.x,d1.B.x);
d.B.y=std::min(d2.B.y,d1.B.y);
}
else
d.A.x=d.B.x=d.A.y=d.B.y=0;
return d;
}
inline Segment drept(Segment d1,Segment d2){
return intersect(d1,d2);
}
int main(){
FILE*fi,*fout;
fi=fopen("reuniune.in" ,"r");
fout=fopen("reuniune.out" ,"w");
fscanf(fi,"%d %d %d %d " ,&D1.A.x,&D1.A.y,&D1.B.x,&D1.B.y);
myswap(D1);
fscanf(fi,"%d %d %d %d " ,&D2.A.x,&D2.A.y,&D2.B.x,&D2.B.y);
myswap(D2);
fscanf(fi,"%d %d %d %d " ,&D3.A.x,&D3.A.y,&D3.B.x,&D3.B.y);
myswap(D3);
fprintf(fout,"%lld " ,aria(D1)+aria(D2)+aria(D3)-aria(drept(D1,D2))-aria(drept(D2,D3))-aria(drept(D1,D3))+aria(drept(D1,drept(D2,D3))));
fprintf(fout,"%lld" ,2*(perim(D1)+perim(D2)+perim(D3)-perim(drept(D1,D2))-perim(drept(D2,D3))-perim(drept(D1,D3))+perim(drept(D1,drept(D2,D3)))));
fclose(fi);
fclose(fout);
return 0;
}