```go
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)
}
```