-- AOJ: http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2006
import Data.List.Split
import Control.Monad.Cont
import Control.Applicative

solve :: String -> String
solve s = let ws = splitOn "0" s
              wss = filter (\x -> x /= "") ws
           in map (\x -> keyToChar x) wss

keyToChar :: []Char -> Char
keyToChar all@(x:xs) = toChar x $ length all

toChar :: Char -> Int -> Char
toChar x n = case x of
               '1' -> solveEx (n-1) ".,!? "
               '2' -> solveEx (n-1) "abc"
               '3' -> solveEx (n-1) "def"
               '4' -> solveEx (n-1) "ghi"
               '5' -> solveEx (n-1) "jkl"
               '6' -> solveEx (n-1) "mno"
               '7' -> solveEx (n-1) "pqrs"
               '8' -> solveEx (n-1) "tuv"
               '9' -> solveEx (n-1) "wxyz"

solveEx :: Int -> [Char] -> Char
solveEx n xs = xs !! (n `mod` length xs)

main = do
    ns <- (map read . words) <$> getLine
    let n = ns !! 0
     in forM_ [0..(n-1)] $ \i ->  do
         ss <- getLine
         putStrLn $ solve ss