import qualified Data.Vector.Unboxed as VU
import qualified Data.Vector.Unboxed.Mutable as VUM
import qualified Data.ByteString.Char8 as B
import Data.List
import Control.Monad

add vec xs
    | h == 'M' = VUM.modify vec (+1) 0
    | h == 'A' = VUM.modify vec (+1) 1
    | h == 'R' = VUM.modify vec (+1) 2
    | h == 'C' = VUM.modify vec (+1) 3
    | h == 'H' = VUM.modify vec (+1) 4
    | otherwise = VUM.modify vec (+1) 5
    where
        h = B.head xs

toBit n acc l
    | n <= 1 =
        let
            res = ((n `rem` 2):acc)
            l' = length res
        in
            if l' < l
                then reverse $  res ++ (replicate (l-l') 0)
                else reverse res
    | otherwise = toBit (n `quot` 2) ((n `rem` 2):acc) l

solve :: [Int] -> Int -> Int -> [Int] 
solve xs n l
    | n < 0 = []
    | ones == 3 = (loop xs bs) : solve xs (n-1) l
    | otherwise = solve xs (n-1) l
    where
        ones = length $ filter (==1) bs
        bs = toBit n [] l
        loop [] [] = 1
        loop (x:xs) (b:bs)
            | b == 1 = x * loop xs bs
            | otherwise = loop xs bs

main = do
    n <- readLn :: IO Int
    tbl <- VUM.replicate 6 0
    forM_ [1..n] $ \_ -> do
        bs <- B.getLine
        add tbl bs
    tbl' <- VU.freeze tbl
    print tbl'
    let f = VU.toList $ VU.filter (/=0) (VU.init tbl')
    let l = length f
    print $ 
        if l < 3
            then 0
            else if l == 3 
                then product f
                else sum $ solve f (2^l-1) l