Problem:
Integral Rectangles

Let us consider rectangles whose height, h, and
width, w, are both integers. We call such rectangles
integral rectangles. In this problem, we consider only wide
integral rectangles, i.e., those with w > h.

We define the following ordering of wide integral rectangles. Given
two wide integral rectangles,

The one shorter in its diagonal line is smaller, and

If the two have diagonal lines with the same length, the one shorter
in its height is smaller.

Given a wide integral rectangle, find the smallest wide integral
rectangle bigger than the given one.

Input

The entire input consists of multiple datasets. The number of
datasets is no more than 100. Each dataset describes a wide integral
rectangle by specifying its height and width, namely h
and w, separated by a space in a line, as follows.

h w

For each dataset, h and w (>h) are both
integers greater than 0 and no more than 100.

The end of the input is indicated by a line of two zeros separated by a space.

Output

For each dataset, print in a line two numbers describing the
height and width, namely h and w (> h), of the
smallest wide integral rectangle bigger than the one described in the
dataset. Put a space between the numbers. No other
characters are allowed in the output.

For any wide integral rectangle given in the input, the width and
height of the smallest wide integral rectangle bigger than the given
one are both known to be not greater than 150.

In addition, although
the ordering of wide integral rectangles uses the comparison of
lengths of diagonal lines, this comparison can be replaced with that
of squares (self-products) of lengths of diagonal lines, which can
avoid unnecessary troubles possibly caused by the use of floating-point
numbers.

Sample Input

1 2
1 3
2 3
1 4
2 4
5 6
1 8
4 7
98 100
99 100
0 0

Output for the Sample Input

1 3
2 3
1 4
2 4
3 4
1 8
4 7
2 8
3 140
89 109

Solution in C# (judge verdict: Wrong Answer)


//#define READ_FILE72 //When you want to input from a file ,define this 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

using CHY72;



namespace CHY72{
    
    
    public class PointXY{
        public int X , Y;
        public int SQLength() { return X * X + Y * Y; }
        public bool Flag = false;
        public int ID = -1;
        public PointXY(int _X,int _Y,int _ID = 0) {
            X = _X; Y = _Y; ID = _ID;
        }
        public PointXY(PointXY P1, int _X = 0, int _Y = 0,int _ID = -1) {
            X = P1.X + _X; Y = P1.Y + _Y; ID = _ID;
        }
        public static bool operator ==(PointXY P1, PointXY P2) {
            return (P1.X== P2.X && P1.Y == P2.Y);
        }
        public static bool operator !=(PointXY P1, PointXY P2) {return !(P1 ==P2);}
        public override int GetHashCode() {return X.GetHashCode() ^ Y.GetHashCode();}
        public override bool Equals(object obj) {
            if (obj == null || this.GetType() != obj.GetType()) {return false;}
            return (this == (PointXY)obj);
        }
        public string CurrentInformation() {
            return "x:" + X + "  y:" + Y + "  ID:" + ID;
        }
        public string ForWriteLineXY(bool reverse = false) {
            if(!reverse)return X + " " + Y;
            else return Y + " " + X;
        }

    }

    public class Lib72 {
        public static T[][] CopyJagArray2<T>(T[][] _Base){
            T[][] NewArray = new T[_Base.Length][];
            for (int i = 0; i < _Base.Length; i++) {
                NewArray[i] = new T[_Base[i].Length ];
                for (int j = 0; j < _Base[i].Length; j++) {
                    NewArray[i][j] = _Base[i][j];
                }
            }
            return NewArray;
        }
        public static T[][][] CopyJagArray3<T>(T[][][] _Base) {
            T[][][] NewArray = new T[_Base.Length][][];
            for (int i = 0; i < _Base.Length; i++) {
                NewArray[i] = CopyJagArray2(_Base[i] ); ;
            }
            return NewArray;
        }

        public static bool isInRect(int _X, int _Y, int _W, int _H) { return (_X >= 0 && _Y >= 0 && _X < _W && _Y < _H); }
        public static int NumFromChar(char CNUM) { return CNUM - 48; }
        public static char LoopChar52(char _C, int n) {
            //Char(C#) uses Uni-Code
            //33 !  "#$%&'(  41 )
            //42 * +,-.  47/
            //48 0  .... 57 9
            //58 :;<=>? 64 @
            //65 A .... 90 Z
            //91 [\]^_ 96`
            //97 a .... 122 z
            int i_C = (int)_C;
            if (i_C > 64 && i_C < 91) i_C -= 65;//0~25 AZ
            else if (i_C > 96 && i_C < 123) i_C -= 71;//26~51 az
            else return '0';
            int RESULT = Modulo ((i_C + n ) , 52);
            if(RESULT < 26) return (char)(RESULT+65);
            else return (char)(RESULT + 71);
        }
        public static int Modulo(int A, int B) {
            // -6 % 5 == -1 ; Modulo (-6 , 5 ) == 4
            int Result = A % B;
            if (Result >= 0) { return Result; }
            else return Result + B;
        }
        public static int intFromHourMinSec(int _h,int _m,int _s) {
            return _s + 60 * _m + 3600 * _h;
        }

        public static int[] KETAArray(int Num) {return KETAArray(Num.ToString()); }
        public static int[] KETAArray(string Num) {
            char[] cKETA = Num.ToCharArray();
            int[] iKETA = new int[cKETA.Length];
            for (int i = 0; i < iKETA.Length; i++) {
                iKETA[i] = NumFromChar(cKETA[i]);
            }
            return iKETA;
        }
        public static int KETA(int Num) { return Num.ToString().ToCharArray().Length; }
        public static int FromKETAArray(int[] _ketaarray) {
            int result = 0;
            int[] R_ketaarray = _ketaarray.Reverse().ToArray(); 
            for (int i = 0,j=1; i < R_ketaarray.Length; i++,j *=10) {
                result += j * R_ketaarray[i];
            }
            return result;
        }
        public static bool isPrime(int p) {
            if (p != 2 && p % 2 == 0) return false;
            if (p == 1) return false;
            int SQp = (int)(Math.Sqrt(p));
            for (int i = 3; i <= SQp; i++) {
                if (p % i == 0) return false;
            }
            return true;
        } 
    }
}    

public class Program {
    static bool ReadLine_1(ref int num1, bool Fin0 = true) {
        string str = Console.ReadLine();
        num1 = int.Parse(str);
        return (Fin0 && num1 == 0);
    }
    static int  ReadLine_1() {
        return  int.Parse(Console.ReadLine());
    }
    static bool ReadLine_2(ref int num1, ref int num2, char Spliter = ' ', bool Fin0 = true,int FinNum =0) {
        string str = Console.ReadLine();
        num1 = int.Parse(str.Split(Spliter)[0]);
        num2 = int.Parse(str.Split(Spliter)[1]);
        return (Fin0 && num1 == FinNum && num2 == FinNum);
    }
    static int[] ReadLine_Array(char Spliter = ' ') {
        return Console.ReadLine().Split(Spliter).Select(s => int.Parse(s)).ToArray();
    }

#if READ_FILE72
    static bool FileReadLine_1(ref int num1, bool Fin0 = true) {
        string str = cReader.ReadLine();
        num1 = int.Parse(str);
        return (Fin0 && num1 == 0);
    }
    static int FileReadLine_1() {
        return int.Parse(cReader.ReadLine());
    }
    static bool FileReadLine_2(ref int num1, ref int num2, char Spliter = ' ', bool Fin0 = true, int FinNum = 0) {
        string str = cReader.ReadLine();
        num1 = int.Parse(str.Split(Spliter)[0]);
        num2 = int.Parse(str.Split(Spliter)[1]);
        return (Fin0 && num1 == FinNum && num2 == FinNum);
    }
    static int[] FileReadLine_Array(char Spliter = ' ') {
        return cReader.ReadLine().Split(Spliter).Select(s => int.Parse(s)).ToArray();
    }

    const string ReadFileName = "Read.txt";
    static bool ReadFromLocal = true;
    static System.IO.StreamReader cReader ;
#endif

    const int DefaultMax = 72727272;


    static void Main(string[] args) {
        #if READ_FILE72  
        cReader = ReadFromLocal ?
            new System.IO.StreamReader(System.IO.Directory.GetCurrentDirectory() + "\\" + ReadFileName, System.Text.Encoding.Unicode) :
            new System.IO.StreamReader(ReadFileName, System.Text.Encoding.Unicode);
        #endif

        Main72();

        #if READ_FILE72
            cReader.Close();
        #endif
    }




    static void Main72() {
        while (true) {
            int h = 0, w = 0;
            //14 27 (925)-> 21 22(925)  (12 28(928))
            if (ReadLine_2(ref h, ref w)) return;
            int BaseLength = new PointXY(w,h).SQLength();
            int MinLength = int.MaxValue;
            var Answer = new PointXY(0,0);
            //28 74 (6260) ->5 79 (6266) (35 71 (6266))
            for (int wi = 1; wi < 161; wi++) {
                for(int hi = wi - 1; hi >0;hi --){
                    if (wi * wi + hi * hi > BaseLength && wi * wi + hi * hi < MinLength) {
                        Answer = new PointXY(wi,hi);
                        MinLength = Answer.SQLength();
                    }
                    else if (wi * wi + hi * hi == BaseLength && wi< w) {
                        Answer = new PointXY(wi, hi);
                        MinLength = Answer.SQLength();                        
                    }
                }
            }
            Console.WriteLine(Answer.ForWriteLineXY(true) );
        }




    }

}