/* ID: zhangzz4 PROG: packrec LANG: C++ */ #include<stdio.h> #include<stdlib.h> const int N=4; struct Rec{int x,y;}rec[N],res[100*100]; int cnt,ans=200*200; int cmp(const void *a,const void *b) { Rec *p1=(Rec *)a; Rec *p2=(Rec *)b; return p1->x - p2->x; } void deal(int p,int q) { if(p*q>ans) return ; if(p>q) {int t=p;p=q;q=t;} if(p*q<ans) { res[0].x=p; res[0].y=q; cnt=1; ans=p*q; return ; } for(int i=0;i<cnt;i++) if(res[i].x==p) return ; res[cnt].x=p,res[cnt].y=q; cnt++; return ; } int main() { freopen("packrec.in","r",stdin); freopen("packrec.out","w",stdout); for(int i=0;i<4;i++) { scanf("%d%d",&rec[i].x,&rec[i].y); if(rec[i].x>rec[i].y){int t=rec[i].x;rec[i].x=rec[i].y;rec[i].y=t;} } //1st int p=0,q=0; for(int i=0;i<4;i++) { p+=rec[i].x; if(rec[i].y>q) q=rec[i].y; } deal(p,q); //printf("1 %3d %3d --%15d/n",p,q,p*q); p=0,q=0; for(int i=0;i<4;i++) { if(p<rec[i].x) p=rec[i].x; q+=rec[i].y; } deal(p,q); //printf("2 %3d %3d --%15d/n",p,q,p*q); //2ed for(int k=0;k<(1<<4);k++) { for(int i=0;i<4;i++) { p=q=0; for(int j=0;j<4;j++) if(j!=i) { if(k&(1<<j)) p+=rec[j].y; else p+=rec[j].x; if(k&(1<<j)) { if(rec[j].x>q) q=rec[j].x; }else { if(rec[j].y>q) q=rec[j].y; } } if(k&(1<<i)) { if(rec[i].x>p) p=rec[i].x; q+=rec[i].y; }else { if(rec[i].y>p) p=rec[i].y; q+=rec[i].x; } deal(p,q); //printf("3 %3d %3d --%15d/n",p,q,p*q); } } //3ed for(int k=0;k<(1<<4);k++) { for(int i=0;i<4;i++) for(int j=0;j<4;j++) if(i!=j) { p=q=0; for(int h=0;h<4;h++) if(h!=i&&h!=j) { if(k&(1<<h)) p+=rec[h].y; else p+=rec[h].x; if(k&(1<<h)) { if(q<rec[h].x) q=rec[h].x; }else { if(q<rec[h].y) q=rec[h].y; } } if(k&(1<<j)) { q+=rec[j].x; if(p<rec[j].y) p=rec[j].y; }else { q+=rec[j].y; if(p<rec[j].x) p=rec[j].x; } if(k&(1<<i)) { if(q<rec[i].x) q=rec[i].x; p+=rec[i].y; }else { if(q<rec[i].y) q=rec[i].y; p+=rec[i].x; } deal(p,q); //printf("4 %3d %3d --%15d/n",p,q,p*q); } } //4th for(int k=0;k<(1<<4);k++) { for(int i=0;i<4;i++) for(int j=0;j<4;j++) if(j!=i) { p=0,q=0; for(int h=0;h<4;h++) if(h!=i&&h!=j) { if(k&(1<<h)) { if(p<rec[h].y) p=rec[h].y; q+=rec[h].x; }else { if(p<rec[h].x) p=rec[h].x; q+=rec[h].y; } } if(k&(1<<i)) { p+=rec[i].y; if(q<rec[i].x) q=rec[i].x; }else { p+=rec[i].x; if(q<rec[i].y) q=rec[i].y; } if(k&(1<<j)) { p+=rec[j].y; if(q<rec[j].x) q=rec[j].x; }else { p+=rec[j].x; if(q<rec[j].y) q=rec[j].y; } deal(p,q); //printf("5 %3d %3d --%15d/n",p,q,p*q); } } //6th for(int k=0;k<(1<<4);k++) for(int i=0;i<4;i++) for(int j=0;j<4;j++) if(i!=j) for(int h=0;h<4;h++) if(h!=i&&h!=j) for(int f=0;f<4;f++) if(f!=i&&f!=j&&f!=h) { p=q=0; p=((k&(1<<f)) ? rec[f].y:rec[f].x)+((k&(1<<h))? rec[h].y:rec[h].x); if(p< ((k&(1<<i))?rec[i].y:rec[i].x)+((k&(1<<j))? rec[j].y: rec[j].x)) p= ((k&(1<<i))?rec[i].y:rec[i].x)+((k&(1<<j))? rec[j].y: rec[j].x); if(p< ((k&(1<<i))?rec[i].y:rec[i].x)+((k&(1<<h))? rec[h].y: rec[h].x)) p= ((k&(1<<i))?rec[i].y:rec[i].x)+((k&(1<<h))? rec[h].y: rec[h].x); q=((k&(1<<i))?rec[i].x:rec[i].y)+((k&(1<<f))?rec[f].x:rec[f].y); if(q< ((k&(1<<h))?rec[h].x:rec[h].y)+((k&(1<<j))?rec[j].x:rec[j].y)) q=((k&(1<<h))?rec[h].x:rec[h].y)+((k&(1<<j))?rec[j].x:rec[j].y); if(q< ((k&(1<<f))?rec[f].x:rec[f].y)+((k&(1<<j))?rec[j].x:rec[j].y)) q=((k&(1<<f))?rec[f].x:rec[f].y)+((k&(1<<j))?rec[j].x:rec[j].y); deal(p,q); //printf("6 %3d %3d %d %d %d %d %d--%15d/n",p,q,p*q,i,j,h,f,k); } printf("%d/n",ans); qsort(res,cnt,sizeof(res[0]),cmp); for(int i=0;i<cnt;i++) printf("%d %d/n",res[i].x,res[i].y); }