-- Try yukicoder -- author: Leonardone @ NEETSDKASU import Data.List (sort) import Data.Fixed main = interact $ unlines . concat . zipWith ($) [return . show . floor . head, map show . tail] . repeat . solve . map read . words data E30 instance HasResolution E30 where resolution _ = 10 ^ 30 type Foo = Fixed E30 solve :: [Integer] -> [Foo] solve (0:0:0:_) = [-1] solve (0:0:_:_) = [0] solve (0:b:c:_) = [1, fromIntegral (-c) / fromIntegral b] solve (a:0:0:_) = [1, 0] solve (a:0:c:_) | e < 0 = undefined -- [0] | otherwise = undefined -- [2, - sqrt e, sqrt e] where e = fromIntegral (-c) / fromIntegral a solve (a:b:0:_) = undefined -- [2, min 0 x, max 0 x] where x = fromIntegral (-b) / fromIntegral a solve (a:b:c:_) | d < 0 = [0] | d == 0 = [1, fromIntegral (-b) / fromIntegral (2*a)] | d > 0 = [2, min y z, max y z] where d = b * b - 4 * a * c y = (fromIntegral (-b) + sqrt' (fromIntegral d)) / fromIntegral (2*a) z = (fromIntegral (-b) - sqrt' (fromIntegral d)) / fromIntegral (2*a) solve _ = undefined sqrt' x = fst $ until (f x) (g x) (x,(0,x)) f x (e,_) = abs (x - e * e) < 1e-15 g x (_,(y,z)) | e * e < x = (e, (e, z)) | otherwise = (e, (y, e)) where e = (y + z) / 2