main = do putStrLn $ show $ solve 1 1 twosum :: Integer -> Integer twosum n = mod n 10 + div n 10 solve :: Integer -> Integer -> Integer solve 12 31 = 0 solve m d | m == 2 && d == 28 = solve (m+1) 1 | d == 31 && (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10) = solve (m+1) 1 + if twosum d == m then 1 else 0 | d == 30 && (m == 4 || m == 6 || m == 9 || m == 11) = solve (m+1) 1 + if twosum d == m then 1 else 0 | d == 31 && m == 12 = 0 | otherwise = solve m d+1 + if twosum d == m then 1 else 0