#!/usr/bin/env runhaskell import Data.Array.ST import Data.Array.Unboxed import Control.Monad import Control.Arrow import qualified Data.ByteString.Lazy.Char8 as B parse :: B.ByteString -> Int parse = maybe 0 fst . B.readInt -- CIP `array` does not have `modifyArray` inc :: (MArray a e m, Ix i, Num e) => a i e -> i -> m () inc a i = readArray a i >>= writeArray a i . (+ 1) count :: [Int] -> Int -> UArray Int Int count l m = runSTUArray $ do a <- newArray (0 , m) 0 mapM_ (inc a) l pure a main :: IO () main = do (m : l) <- map parse . B.lines <$> B.getContents let c = count (drop 1 l) m forM_ (indices c) (uncurry replicateM . ((c !) &&& print))