{-# LANGUAGE ImplicitParams #-} import Data.List main = do -- Read stdin content <- getContents let hd:tl = lines content let ?totalcases = read hd process 1 $ map (map read) (map words tl) process :: (?totalcases :: Int) -> Int -> [[Integer]] -> IO () process count content = do if count > ?totalcases then return () else case content of ([n]:x:y:tl) -> let work a b = sum (zipWith (*) a b) in do putStr ("Case #" ++ show count ++ ": ") putStrLn $ show $ work (sort x) (sortBy (flip compare) y) process (count+1) tl