object Main {

  def main(args: Array[String]): Unit = {
    import scala.io.StdIn._
    val Sd = readLine()
    val T = readLine()

    // Tが含まれていない場合には、満たさない
    // Tが含まれている場合には、含まれている箇所

    // わからない箇所は、aを埋めれば、辞書順最小になる。
    // Tが含まれる場所は、含まれるとすれば、一番後ろがいい。
    // 'a'で|T|と同じ長さの文字列を作ると、常に'a'だけで作った文字列のほうが辞書順最小になる。

    // 後ろから見ていって、一回マッチしたら、そこは置き換えて
    // 一回もマッチしなかったら, UNRESTORABLE.
    // それ以降の?は'a'に変換する.

    val reversedT = T.reverse
    val tSize = T.size

    def isMatch(ambiguous: String, t: String): Boolean =
      ambiguous.zip(t).forall {
        case ('?', _) => true
        case (a, b) => a == b
      }

    def solve(reversedS: String, checked: String): String =
      if (reversedS.size < tSize)
        // Tにマッチするケースが発見できないので,
        "UNRESTORABLE"
      else {
        // マッチするケースを発見できる可能性がある.
        if (isMatch(reversedS.take(tSize), reversedT))
          // マッチしたなら, マッチした部分を置き換えて, 残りの後ろの?を全て'a'にする.
          (checked.replace('?', 'a') + reversedT + reversedS.drop(tSize).replace('?', 'a')).reverse
        else
          solve(reversedS.tail, reversedS.head + checked)
      }

    println(solve(Sd.reverse, ""))
  }

}