#include<fstream>
#include<vector>
using namespace std;
ifstream fin( "reuniune.in" ); ofstream fout( "reuniune.out" );
typedef long long i64;
const int inf = (1 << 30) - 1 + (1 << 30);
struct str{
int x1, x2, y1, y2;
} v[ 4 ];
inline int min2( int a, int b ) {
return ( a < b ? a : b );
}
inline int max2( int a, int b ) {
return ( a > b ? a : b );
}
inline str inters( str p, str q ) {
str ans;
ans.x1 = max2( p.x1, q.x1 ); ans.y1 = max2( p.y1, q.y1 );
ans.x2 = min2( p.x2, q.x2 ); ans.y2 = min2( p.y2, q.y2 );
return ans;
}
inline void init( str &s ) {
s.x1 = s.y1 = -inf;
s.x2 = s.y2 = inf;
}
inline str sol( int a, int b, int c ) {
str s;
init( s );
s = inters( s, v[ a ] );
s = inters( s, v[ b ] );
s = inters( s, v[ c ] );
return s;
}
inline i64 arie( int a, int b, int c ) {
str s = sol( a, b, c );
if ( s.x1 < s.x2 && s.y1 < s.y2 ) {
return 1LL * (s.x2 - s.x1) * (s.y2 - s.y1);
}
return 0;
}
inline i64 peri( int a, int b, int c ) {
str s = sol( a, b, c );
if ( s.x1 < s.x2 && s.y1 < s.y2 ) {
return 2 * 1LL * ( s.x2 - s.x1 + s.y2 - s.y1 );
}
return 0;
}
int main() {
init( v[ 0 ] );
for( int i = 1; i <= 3; ++ i ) {
fin >> v[ i ].x1 >> v[ i ].y1 >> v[ i ].x2 >> v[ i ].y2;
}
fout << arie( 0, 0, 1 ) + arie( 0, 0, 2 ) + arie( 0, 0, 3 )
- arie( 0, 1, 2 ) - arie( 0, 1, 3 ) - arie( 0, 2, 3 ) + arie( 1, 2, 3 ) << " ";
fout << peri( 0, 0, 1 ) + peri( 0, 0, 2 ) + peri( 0, 0, 3 )
- peri( 0, 1, 2 ) - peri( 0, 1, 3 ) - peri( 0, 2, 3 ) + peri( 1, 2, 3 ) << "\n";
fin.close();
fout.close();
return 0;
}