import Data.Char import Data.Int crack :: Int -> [Int64] crack n = helper n 0 0 where helper 0 _ acc | acc == f acc = [acc] | otherwise = [] helper k from acc = concat [ helper (k-1) c (acc + ps !! c) | c <- [from..9] ] ps = map (^13) [0..9] f acc = sum [ ps !! (digitToInt c) | c <- show acc ] main = mapM_ print (crack 15)