import Data.Complex import Data.List main = do dat <- readFile "polygon.in" mapM_ (pp.solve) $ parse dat parse dat = f $ lines dat where f (sn:ss) = (map parseP ps,map parseA as) : f rs where n = read sn (ps,ts) = splitAt n ss (as,rs) = splitAt n ts f _ = [] parseP s = (\[x,y] -> (x:+y)) $ map read $ words s parseA s = mkPolar 1.0 $ read (head $ words s) / 180.0 * pi solve (ps,as) = ans where ls = zip (zipWith (-) (tail ps ++ ps) ps) as (zf,zs) = foldl (\(f,s) (d,a) -> (f*a,s*a-d)) (1,0) ls z = -zs/(zf-1) (_,ans) = mapAccumL (\z (p,(d,a)) -> (z*a-d,z+p)) z $ zip ps ls pp xs = mapM_ (\c -> putStrLn $ show (realPart c) ++ " " ++ show (imagPart c)) xs >> putStrLn ""