package main
import (
"bufio"
"fmt"
"io"
"os"
"strconv"
"strings"
)
var (
readString func() string
stdout *bufio.Writer
)
func init() {
readString = newReadString(os.Stdin)
stdout = bufio.NewWriter(os.Stdout)
}
func newReadString(ior io.Reader) func() string {
r := bufio.NewScanner(ior)
r.Buffer(make([]byte, 1024), int(1e+11))
r.Split(bufio.ScanWords)
return func() string {
if !r.Scan() {
panic("Scan failed")
}
return r.Text()
}
}
func readInt() int {
return int(readInt64())
}
func readInt64() int64 {
i, err := strconv.ParseInt(readString(), 0, 64)
if err != nil {
panic(err.Error())
}
return i
}
func readIntSlice(n int) []int {
b := make([]int, n)
for i := 0; i < n; i++ {
b[i] = readInt()
}
return b
}
func readLengthAndSlice() []int {
n := readInt()
return readIntSlice(n)
}
func printf(f string, args ...interface{}) (int, error) {
return fmt.Fprintf(stdout, f, args...)
}
func println(args ...interface{}) (int, error) {
return fmt.Fprintln(stdout, args...)
}
func minInt(a, b int) int {
if a < b {
return a
}
return b
}
func minUint(a, b uint) uint {
if a < b {
return a
}
return b
}
func minInt64(a, b int64) int64 {
if a < b {
return a
}
return b
}
func minUint64(a, b uint64) uint64 {
if a < b {
return a
}
return b
}
func maxInt(a, b int) int {
if a < b {
return b
}
return a
}
func maxUint(a, b uint) uint {
if a < b {
return b
}
return a
}
func maxInt64(a, b int64) int64 {
if a < b {
return b
}
return a
}
func maxUint64(a, b uint64) uint64 {
if a < b {
return b
}
return a
}
func absInt(a int) int {
if a < 0 {
return -a
}
return a
}
func absInt64(a int64) int64 {
if a < 0 {
return -a
}
return a
}
// readString() string
// readInt() int
// readIntSlice(n int) []int
// readLengthAndSlice() []int
func reverse(s string) string {
b := []byte(s)
for i, j := 0, len(b)-1; i < j; i, j = i+1, j-1 {
b[i], b[j] = b[j], b[i]
}
return string(b)
}
func main() {
defer stdout.Flush()
s := readString()
t := readString()
rsb := []byte(reverse(s))
rtb := []byte(reverse(t))
for i := 0; i+len(rtb) <= len(rsb); i++ {
matched := true
for j := 0; j < len(rtb); j++ {
if rsb[i+j] != '?' && rsb[i+j] != rtb[j] {
matched = false
break
}
}
if matched {
b := append(rsb[0:i], rtb...)
b = append(b, rsb[i+len(rtb):]...)
println(strings.Replace(reverse(string(b)), "?", "a", -1))
return
}
}
println("UNRESTORABLE")
}