package main import . "fmt" import . "math/big" func main() { var t int Scan(&t) for ;t>0;t-- { var d,ax,ay int64 Scan(&d, &ax, &ay) switch { case ax == 0: Println(d*ay) case ay == 0: Println(d*ax) default: m := new(Int).GCD(nil, nil, NewInt(ax), NewInt(ay)).Int64() dx,dy := ay/m, ax/m var s int64 if bx,by := ax-(ax/dx)*dx,ay+(ax/dx)*dy; (0<=bx&&bx<ax)&&(ay<by&&by<=d) { tmp := by*(ax*2-bx)-ax*ay-(ax-bx)*(by-ay) s = max(s, tmp) } if bx,by := ax-((d-ay)/dy)*dx,ay+((d-ay)/dy)*dy; (0<=bx&&bx<ax)&&(ay<by&&by<=d) { tmp := by*(ax*2-bx)-ax*ay-(ax-bx)*(by-ay) s = max(s, tmp) } if bx,by := ax+(ay/dy)*dx,ay-(ay/dy)*dy; (ax<bx&&bx<=d)&&(0<=by&&by<ay) { tmp := bx*(ay*2-by)-ax*ay-(bx-ax)*(ay-by) s = max(s, tmp) } if bx,by := ax+((d-ax)/dx)*dx,ay-((d-ax)/dx)*dy; (ax<bx&&bx<=d)&&(0<=by&&by<ay) { tmp := bx*(ay*2-by)-ax*ay-(bx-ax)*(ay-by) s = max(s, tmp) } Println(s) } } } func max(a, b int64) int64 { if a > b { return a } else { return b } }