Problem:
鶴ヶ城

会津若松市のシンボルである鶴ヶ城は、蒲生氏郷が本格的な天守閣を築城し、「鶴ヶ城」と名付けました。天守閣からは会津盆地が一望できます。また、晴れた日には、白虎隊で有名な飯盛山の山頂から鶴ヶ城を見ることができます。

会津若松市の今後の広報活動の参考にするため、鶴ヶ城に訪れた来場者について、年代調査をすることにしました。来場者の年齢を入力とし、下記の年齢区分別に人数を出力するプログラムを作成してください。

区分

年齢

10歳未満

0 ~ 9

10代

10 ~ 19

20代

20 ~ 29

30代

30 ~ 39

40代

40 ~ 49

50代

50 ~ 59

60歳以上

60 ~

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。
各データセットは以下の形式で与えられます。

n
a1
a2
:
an

1 行目に来場者の人数 n (1 ≤ n ≤ 1000000)、続く n 行に i 人目の来場者の年齢 ai ( 0 ≤ ai ≤ 120 ) が与えられます。

Output

データセット毎に以下の形式で人数を出力します。

1 行目: 10 歳未満の人数

2 行目: 10 代の人数

3 行目: 20 代の人数

4 行目: 30 代の人数

5 行目: 40 代の人数

6 行目: 50 代の人数

7 行目: 60 歳以上の人数

Sample Input

8
71
34
65
11
41
39
6
5
4
67
81
78
65
0

Output for the Sample Input

2
1
0
2
1
0
2
0
0
0
0
0
0
4

Solution in Haskell (judge verdict: Time Limit Exceeded)

import Control.Applicative
import Control.Monad
import Control.Monad.ST
import Data.Functor
import Data.Function
import Data.Monoid
import Data.Maybe
import Data.List
import qualified Data.Foldable as Foldable
import qualified Data.Set as Set
--import qualified Data.Sequence as Sequence
import Data.List.Split
import Data.Bits
import Data.Char
import Data.Ix
import Data.Ratio
import Data.Ord
import Data.Tuple
--import Data.Array
--import Data.Array.Unboxed
import Data.Array.IArray
import Data.Array.MArray
import Data.Array.IO
import Data.Array.ST
import Data.IORef
import Data.STRef
-- import System.IO.Unsafe

-- templete
readInt = read :: String -> Int
readInteger = read :: String -> Integer
readDouble = read :: String -> Double
getInt = readLn :: IO Int
getInts = map readInt . words <$> getLine
getInteger = readLn :: IO Integer
getIntegers = map readInteger . words <$> getLine
getDouble = readLn :: IO Double
sjoin :: (Show a) => [a] -> String
sjoin = unwords . map show
cond :: a -> a -> Bool -> a
cond t f c = if c then t else f
apply2 :: (a -> a -> b) -> [a] -> b
apply2 f [x,y] = f x y
apply3 :: (a -> a -> a -> b) -> [a] -> b
apply3 f [x,y,z] = f x y z
apply4 :: (a -> a -> a -> a -> b) -> [a] -> b
apply4 f [x,y,z,w] = f x y z w
fnTuple :: (a -> b, a -> c) -> a -> (b, c)
fnTuple (f,g) a = (f a, g a)
replace :: (Eq a) => a -> a -> [a] -> [a]
replace x y = map (\z -> if z==x then y else z)
binMap :: (a -> a -> b) -> [a] -> [b]
binMap f (x:xs@(y:_)) = f x y : binMap f xs
binMap _ _ = []
splitRec :: Int -> [a] -> [[a]]
splitRec _ [] = []
splitRec n xs = let (y,ys) = splitAt n xs in y : splitRec n ys
infixl 7 `divCeil`
divCeil :: Integral a => a -> a -> a
x `divCeil` y = (x+y-1) `div` y
coverC :: Ord a => (a, a) -> a -> Bool
coverC (l,r) x = l<=x && x<=r
coverH :: Ord a => (a, a) -> a -> Bool
coverH (l,r) x = l<=x && x<r
-- templete

calc (a,b,c,d,e,f,g) [] = [a,b,c,d,e,f,g]
calc (a,b,c,d,e,f,g) (x:xs) = calc nt xs
  where
    nt
      | coverH (0,10) x  = (a+1,b,c,d,e,f,g)
      | coverH (10,20) x = (a,b+1,c,d,e,f,g)
      | coverH (20,30) x = (a,b,c+1,d,e,f,g)
      | coverH (30,40) x = (a,b,c,d+1,e,f,g)
      | coverH (40,50) x = (a,b,c,d,e+1,f,g)
      | coverH (50,60) x = (a,b,c,d,e,f+1,g)
      | otherwise        = (a,b,c,d,e,f,g+1)

main = do
    n <- getInt
    when (n/=0) $ replicateM n getInt >>= mapM_ print . calc (0,0,0,0,0,0,0) >> main