module Main where

import           Control.Monad
import           Debug.Trace
import qualified Data.Vector.Unboxed           as VU
import           Data.List
import qualified Data.ByteString               as BS
import qualified Data.ByteString.Char8         as BSC8
import           Data.Char
import           Data.Maybe

tuplify2 (x : y : _) = (x, y)
tuplify2 _           = undefined

getVUIntFromInputLineAtBSC8 :: IO (VU.Vector Int)
getVUIntFromInputLineAtBSC8 =
    VU.unfoldr (BSC8.readInt . BSC8.dropWhile isSpace) <$> BSC8.getLine
getVUIntListFromInputLineAtBSC8 =
    VU.unfoldr (BSC8.readInt . BSC8.dropWhile isSpace) <$> BSC8.getLine

readInt = fst . fromJust . BSC8.readInt
readIntTuple = tuplify2 . map readInt . BSC8.words
readIntList = map readInt . BSC8.words

getInt = readInt <$> BSC8.getLine
getIntList = readIntList <$> BSC8.getLine
getIntNList n = map readIntList <$> replicateM (fromIntegral n) BSC8.getLine
getIntMatrix = map readIntList . BSC8.lines <$> BS.getContents
getIntTuple = readIntTuple <$> BSC8.getLine
getIntNTuples n = map readIntTuple <$> replicateM (fromIntegral n) BSC8.getLine
getIntTuples = map readIntTuple . BSC8.lines <$> BSC8.getContents

main :: IO [()]
main = do
    [aN, aK] <- getIntList
    aNumList <- getIntList
    let numList = foldl (\acc x -> delete x acc) [0 .. 9] aNumList
    let minDigit =
            foldl (\acc x -> if (10 ^ x - 1) < aN then succ acc else acc)
                  0
                  [0 .. 4]
                - 1
    let digitList = (reverse [0 .. minDigit])
    let priceList = foldl
            (\acc x -> acc ++ [div (mod aN (10 ^ (x + 1))) (10 ^ x)])
            []
            digitList
    let ret = getListOfSpecialPrice priceList numList
    mapM (putStr . show) ret

getListOfSpecialPrice :: [Int] -> [Int] -> [Int]
getListOfSpecialPrice []                 numList = []
getListOfSpecialPrice priceList@(x : xs) numList = if elem x numList
    then [x] ++ getListOfSpecialPrice xs numList
    else 
        let better = (filter (\y -> y > x) numList)
        in if better == [] 
            then getMin (reverse [0 .. length xs + 1]) numList
            else [head (filter (\y -> y > x) numList)] ++ (getMin (reverse [0 .. length xs - 1]) numList)



getMin :: [Int] -> [Int] -> [Int]
getMin digitList numList = foldl (\acc x -> acc ++ [head numList]) [] digitList
