import Control.Monad import Data.List (transpose) import Text.Printf main :: IO () main = do t <- liftM read getLine forM_ [(1::Int)..t] $ \i -> do n <- liftM read getLine dat <- sequence $ replicate n $ liftM (map read . words) getLine let [x0,y0,z0,vx,vy,vz] = map ((/ fromIntegral n) . sum) $ transpose dat let a,b,c :: Double a = sum $ map (^(2::Int)) [vx,vy,vz] b = x0*vx + y0*vy + z0*vz c = sum $ map (^(2::Int)) [x0,y0,z0] t = if a==0 then 0 else (if b/a > 0 then 0 else - b/a) d = sqrt $ sum $ map (^2) [x0+vx*t,y0+vy*t,z0+vz*t] printf "Case #%d: %.8f %.8f\n" i d t {- x^2 + y^2 + z^2 = (x0+vx*t)^2 + (y0+vy*t)^2 + (z0+vz*t)^2 = (x0^2 + 2*x0*vx*t + vx^2*t^2) + (y0^2 + 2*y0*vy*t + vy^2*t^2) + (z0^2 + 2*z0*vz*t + vz^2*t^2) = (vx^2 + vy^2 + vz^2)*t^2 + 2*(x0*vx + y0*vy + z0*vz)*t + (x0^2 + y0^2 + z0^2) = a*t^2 + 2*b*t + c = t^2 + 2*(b/a)*t + c/a = (t+(b/a))^2 + c/a - (b/a)^2 where x = (x0+vx*t) y = (y0+vy*t) z = (z0+vz*t) a = vx^2 + vy^2 + vz^2 b = x0*vx + y0*vy + z0*vz c = x0^2 + y0^2 + z0^2 -}