← Home
package main

import (
	"io"
	"os"
)

func main() {
	data, _ := io.ReadAll(os.Stdin)
	p := 0
	for p < len(data) && data[p] <= ' ' {
		p++
	}
	l := p
	for p < len(data) && data[p] > ' ' {
		p++
	}
	s := data[l:p]
	for p < len(data) && data[p] <= ' ' {
		p++
	}
	l = p
	for p < len(data) && data[p] > ' ' {
		p++
	}
	t := data[l:p]

	var cs, ct [26]int64
	var q int64

	for _, ch := range s {
		if ch == '?' {
			q++
		} else {
			cs[ch-'a']++
		}
	}
	for _, ch := range t {
		ct[ch-'a']++
	}

	n, m := int64(len(s)), int64(len(t))

	feasible := func(k int64) bool {
		var need int64
		for i := 0; i < 26; i++ {
			req := ct[i]*k - cs[i]
			if req > 0 {
				need += req
				if need > q {
					return false
				}
			}
		}
		return true
	}

	var lo, hi int64 = 0, n / m
	for lo < hi {
		mid := (lo + hi + 1) / 2
		if feasible(mid) {
			lo = mid
		} else {
			hi = mid - 1
		}
	}

	var need [26]int64
	rem := q
	for i := 0; i < 26; i++ {
		req := ct[i]*lo - cs[i]
		if req > 0 {
			need[i] = req
			rem -= req
		}
	}
	need[0] += rem

	ans := append([]byte(nil), s...)
	ptr := 0
	for i := 0; i < len(ans); i++ {
		if ans[i] == '?' {
			for need[ptr] == 0 {
				ptr++
			}
			ans[i] = byte('a' + ptr)
			need[ptr]--
		}
	}

	os.Stdout.Write(ans)
}