#include <stdio.h>
static inline int max( int a, int b ) {
return ( a >= b ? a : b );
}
static inline int min( int a, int b ) {
return ( a <= b ? a : b );
}
struct Andrei {
int i1, i2;
int j1, j2;
};
unsigned long long arie( const Andrei& A ) {
if( A.i2 <= A.i1 )
return 0LL;
if( A.j2 <= A.j1 )
return 0LL;
return ( unsigned long long )( A.i2 - A.i1 ) * ( A.j2 - A.j1 );
}
unsigned long long per( const Andrei& A ) {
if( A.i2 <= A.i1 )
return 0LL;
if( A.j2 <= A.j1 )
return 0LL;
return ( unsigned long long )( A.i2 - A.i1 + A.j2 - A.j1 ) * 2;
}
Andrei make( const Andrei& A, const Andrei& B ) {
Andrei C;
C.i1 = max( A.i1, B.i1 );
C.i2 = min( A.i2, B.i2 );
C.j1 = max( A.j1, B.j1 );
C.j2 = min( A.j2, B.j2 );
return C;
}
int main()
{
Andrei A, B, C;
FILE *fin = fopen( "reuniune.in", "r" );
fscanf( fin, "%d %d %d %d", &A.i1, &A.j1, &A.i2, &A.j2 );
fscanf( fin, "%d %d %d %d", &B.i1, &B.j1, &B.i2, &B.j2 );
fscanf( fin, "%d %d %d %d", &C.i1, &C.j1, &C.i2, &C.j2 );
fclose( fin );
int up = min( A.i1, min( B.i1, C.i1 ) );
int down = max( A.i2, max( B.i2, C.i2 ) );
int left = min( A.j1, min( B.j1, C.j1 ) );
int right = max( A.j2, max( B.j2, C.j2 ) );
Andrei D = make( A, B );
Andrei E = make( B, C );
Andrei G = make( A, C );
Andrei F = make( D, E );
unsigned long long perimetru = per( A ) + per( B ) + per( C ) - per( E ) - per( D ) - per( G ) + per( F );
unsigned long long Arie = arie( A ) + arie( B ) + arie( C ) - arie( D ) - arie( G ) - arie( E ) + arie( F );
FILE *fout = fopen( "reuniune.out", "w" );
fprintf( fout, "%llu %llu\n", Arie, perimetru );
fclose( fout );
return 0;
}