import Data.Bits main = do n <- getLine let g = grundy (read n :: Int) $ sieve [2..(read n :: Int)] if g /= 0 then putStrLn "Alice" else putStrLn "Bob" sieve :: [Int] -> [Int] sieve [] = [] sieve (p:xs) = p : sieve [x | x <- xs, x `mod` p /= 0] grundy :: Int -> [Int] -> Int grundy x [] = 0 grundy x (p:ps) | cnt == 0 = 0 `xor` grundy x ps | otherwise = cnt `xor` (grundy (x `div` (p ^ cnt)) ps) where cnt = count x p count :: Int -> Int -> Int count x y = case x `mod` y of 0 -> 1 + count (x `div` y) y _ -> 0;