Problem:
Prime Factorization

Factorize a given integer n.

Input

n

An integer n is given in a line.

Output

Print the given integer n and :. Then, print prime factors in ascending order. If n is divisible by a prime factor several times, the prime factor should be printed according to the number of times. Print a space before each prime factor.

Constraints

2 ≤ n ≤ 109

Sample Input 1

12

Sample Output 1

12: 2 2 3

Sample Input 2

126

Sample Output 2

126: 2 3 3 7

Solution in Haskell (judge verdict: Time Limit Exceeded)

import Data.List

main = do
  n <- readLn
  putStrLn $ show n ++ ": " ++ unwords (fmap show $ solve n)

factors :: Int -> [Int]
factors n = [d | d <- 2:[3,5..n], n `mod` d == 0]

primeFactor :: Int -> [Int]
primeFactor 1 = []
primeFactor n = d : primeFactor (n `div` d)
  where d = factors n !! 1

solve :: Int -> [Int]
solve n = reverse $ primeFactor2 [] n

primeFactor2 :: [Int] -> Int -> [Int]
primeFactor2 res 1 = res
primeFactor2 res n = primeFactor2 (d : res) (n `div` d)
    where d = head $ factors n