import Data.List main :: IO () main = print . sum $ filter isPan [1..9876] isPan :: Int -> Bool isPan n = nub s == s && or [ sort (show x ++ show y) == ['1'..'9'] \\ s | x <- [1 .. floor . sqrt $ fromIntegral n] , let (y, rest) = n `divMod` x, rest == 0 ] where s = '0' : show n