#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>using namespace std;typedef struct Rect Rect;struct Rect { int wid; int ht;};Rectrotate ( Rect r ){ Rect nr; nr.wid = r.ht; nr.ht = r.wid; return nr;}intmax ( int a, int b ){ return a > b ? a : b;}intmin ( int a, int b ){ return a < b ? a : b;}int tot;int bestarea;int bestht[101];voidrecord ( Rect r ){ int i; if ( r.wid*r.ht < tot ) * ( long* ) 0 = 0; if ( r.wid*r.ht < bestarea || bestarea == 0 ) { bestarea = r.wid * r.ht; for ( i = 0; i <= 100; i++ ) bestht[i] = 0; } if ( r.wid*r.ht == bestarea ) bestht[min ( r.wid, r.ht ) ] = 1;}voidcheck ( Rect *r ){ Rect big; int i; big.wid = 0; big.ht = 0; for ( i = 0; i < 4; i++ ) { big.wid += r[i].wid; big.ht = max ( big.ht, r[i].ht ); } record ( big ); big.wid = 0; big.ht = 0; for ( i = 0; i < 3; i++ ) { big.wid += r[i].wid; big.ht = max ( big.ht, r[i].ht ); } big.ht += r[3].ht; big.wid = max ( big.wid, r[3].wid ); record ( big ); big.wid = r[0].wid + r[1].wid; big.ht = max ( r[0].ht, r[1].ht ); big.ht += r[2].ht; big.wid = max ( big.wid, r[2].wid ); big.wid += r[3].wid; big.ht = max ( big.ht, r[3].ht ); record ( big ); big.wid = r[0].wid + r[1].wid; big.ht = max ( r[0].ht, r[1].ht ); big.wid += max ( r[2].wid, r[3].wid ); big.ht = max ( big.ht, r[2].ht + r[3].ht ); record ( big ); big.ht = max ( r[0].ht + r[2].ht, r[1].ht + r[3].ht ); big.wid = r[0].wid + r[1].wid; if ( r[0].ht < r[1].ht ) big.wid = max ( big.wid, r[2].wid + r[1].wid ); if ( r[0].ht + r[2].ht > r[1].ht ) big.wid = max ( big.wid, r[2].wid + r[3].wid ); if ( r[1].ht < r[0].ht ) big.wid = max ( big.wid, r[0].wid + r[3].wid ); big.wid = max ( big.wid, r[2].wid ); big.wid = max ( big.wid, r[3].wid ); record ( big );}voidcheckrotate ( Rect *r, int n ){ if ( n == 4 ) { check ( r ); return; } checkrotate ( r, n + 1 ); r[n] = rotate ( r[n] ); checkrotate ( r, n + 1 ); r[n] = rotate ( r[n] );}voidcheckpermute ( Rect *r, int n ){ Rect t; int i; if ( n == 4 ) checkrotate ( r, 0 ); for ( i = n; i < 4; i++ ) { t = r[n], r[n] = r[i], r[i] = t; checkpermute ( r, n + 1 ); t = r[n], r[n] = r[i], r[i] = t; }}int main ( void ){ Rect r[4]; int i; for ( i = 0; i < 4; i++ ) scanf ( "%d %d", &r[i].wid, &r[i].ht ); tot = ( r[0].wid * r[0].ht + r[1].wid * r[1].ht + r[2].wid * r[2].ht + r[3].wid * r[3].ht ); checkpermute ( r, 0 ); printf ( "%dn", bestarea ); for ( i = 0; i <= 100; i++ ) if ( bestht[i] ) printf ( "%d %dn", i, bestarea / i ); return 0;}