{-# LANGUAGE OverloadedStrings, ViewPatterns #-}
import qualified Data.ByteString.Char8 as B
import Data.Maybe

main :: IO ()
main = B.getLine >>= main'
    where
        main' s = B.getLine >>= B.putStrLn . solve s

solve :: B.ByteString -> B.ByteString -> B.ByteString
solve s t
    | isNothing res = "UNRESTORABLE"
    | otherwise = recf s 0 $ fromJust res
    where
        res = checks t s

        recf xxs@(B.uncons -> Just (x, xs)) m n
            | m == n = t `B.append` recf (B.drop len xxs) (m + len) n
            | x == '?' = B.cons 'a' $ recf xs (m + 1) n
            | otherwise = B.cons x $ recf xs (m + 1) n

        recf _ _ _ = B.empty

        len = B.length t

check :: B.ByteString -> B.ByteString -> Bool
check (B.uncons -> Just (x, xs)) (B.uncons -> Just (y, ys))
    | y == '?' || x == y = check xs ys
    | otherwise = False
check _ _ = True

checks :: B.ByteString -> B.ByteString -> Maybe Int
checks t s = recf s 0
    where
        recf xxs@(B.uncons -> Just (_, xs)) n
            | tl > sl - n = Nothing
            | check t xxs = ef n $ recf xs (n + 1)
            | otherwise = recf xs (n + 1)
        recf _ _ = Nothing

        ef x (Just y) = return $ max x y
        ef x _ = return x

        tl = B.length t
        sl = B.length s
