import qualified Data.Char as C import qualified Data.List as L main :: IO () main = do n <- getLine let ns = map C.digitToInt . L.nub $ n result = if length ns == 1 then read n else proc (read n) $ createPattern ns print result proc :: Integer -> [(Integer, Integer)] -> Integer proc n ns = foldr gcd n ns' where ns' = map (\(a, b) -> 9 * (a - b)) ns createPattern :: [Int] -> [(Integer, Integer)] createPattern ns = map (\(x, y) -> (toInteger x, toInteger y)) ns' where pattern = [(x, y) | x <- [0..9], y <- [0..9], x > y] ns' = filter (\(x, y) -> x `elem` ns && y `elem` ns) pattern