#include // 2つの長方形の対角線の長さを比較する。 // 同じ長方形の場合には0、 // h1,w1の方が対角線が大きい場合には1、 // h2,w2の方が対角線が大きい場合には-1を返す。 int compare(int h1,int w1,int h2,int w2) { // 高さと幅が同じ場合には、対角線を計算する前に0を返す。 if(h1 == h2 && w1 == w2){ return 0; } // 対角線の長さを計算する。 int dline1 = h1*h1+w1*w1; int dline2 = h2*h2+w2*w2; // 対角線の長さが異なる場合には、dline1が大きければ1、dline2が大きければ-1を返す。 if(dline1 > dline2){ return 1; }else if(dline1 < dline2){ return -1; } // 対角線の長さが同じ場合には、h1、h2を比較してh1が大きい場合には1、そうではない場合は-1を返す。 if(h1 > h2){ return 1; }else{ return -1; } } int main() { int h,w; // 高さと幅を読み込む。読み込み成功してかつ、両方が0でなければ処理を継続する。 while(2==scanf("%d %d",&h,&w) && (h!=0&&w!=0)){ // 入力データよりも大きな対角線を持つ横長長方形の最小値を検索する。 // 最小値の検索のため、解答の初期値は問題の定義上の最大値としておく。 int min_h = 150; int min_w = 150; // 横幅150、縦幅150の大きさ以内のすべての横長長方形について、調査する。 // 150という数字は、問題文に解答の取りうる範囲として定義されている。 for(int hcnt=1;hcnt<150;hcnt++){ // 横長長方形となるために、横は縦の1つ大きい数字からループを開始する。 for(int wcnt=hcnt+1;wcnt<=150;wcnt++){ // 入力データよりも対角線が長い、かつ、 // 現在の最小値候補よりも対角線が短い、 // という条件を満たす場合には、この時点での最小値候補となるため、記録する。 if(1==compare(hcnt,wcnt,h,w) && 1==compare(min_h,min_w,hcnt,wcnt)){ min_h = hcnt; min_w = wcnt; } } } // 最後に残った最小値を記録した幅、高さを出力する。 printf("%d %d\n",min_h,min_w); } return 0; }