import Data.Char (toUpper) import Data.List (elemIndex) import Data.Maybe (catMaybes, fromJust, isNothing) import Control.Applicative ((<$>)) digits = ['0' .. '9'] ++ ['A' .. 'Z'] :: [Char] digitToDec :: Int -> Char -> Maybe Int digitToDec r c | r < 2 || 36 < r = Nothing | otherwise = elemIndex (toUpper c) $ take r digits nAryToDec :: Int -> String -> Maybe Int nAryToDec r s | elem Nothing ds = Nothing | otherwise = Just $ sum $ zipWith (*) (catMaybes ds) [r ^ k | k <- [0 ..]] where ds = reverse $ map (digitToDec r) s minimizeInt :: String -> Maybe Int minimizeInt s | isNothing r = Nothing | otherwise = flip nAryToDec s $ fromJust r where r = (<$>) (+ 1) $ flip elemIndex digits $ maximum s main :: IO () main = getLine >> getContents >>= print . minimum . catMaybes . map minimizeInt . lines