import Data.List zagadka :: (Integral a) => a -> Maybe a zagadka n = if n < 10 then return n else solve n 9 where divides k x = x`mod`k == 0 solve m 1 = if m == 1 then return 0 else Nothing solve m k = do let (xs, m2:_) = span (k`divides`) (iterate (`div`k) m) acc <- solve m2 (k-1) return (foldl (\acc _ -> 10*acc + k) acc xs) main = interact (concatMap (message . zagadka . read) . words) where message (Just x) = show x ++ "\n" message Nothing = "Rozwiazanie nie istnieje\n"