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)