-- yukicoder My Practice -- author: Leonardone @ NEETSDKASU -- http://yukicoder.me/problems/25 -- 解説読んだ後 import Data.List import qualified Data.Set as Set main = do n <- readLn putStrLn $ solve n solve n = let p = pn n s = Set.fromAscList [0,1] r = resultMap p [2..n] s in if Set.member n r then "Win" else "Lose" resultMap _ [] s = s resultMap p (x:xs) s = let f _ [] s = s f x (p:ps) s | v < 0 = s | Set.notMember v s = f x ps $ Set.insert x s | otherwise = f x ps s where v = x - p ss = f x p s in resultMap p xs ss primeNumbers n = f [2..n] where f [] = [] f (x:xs) = x : f [z | z <- xs, (z `mod` x) > 0] pn n = f n [2..n] [] Set.empty where f _ [] ls _ = reverse ls f n (x:xs) ls s | Set.member x s = f n xs ls s | otherwise = f n xs (x:ls) $ foldl (\s x -> Set.insert x s) s [y * x | y <- [2..(n `div` x)]]