const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
// 双指针思路
void async function () {
// Write your code here
var inputArr = [];
while(line = await readline()){
inputArr.push(line)
}
const num = inputArr[0]
// 循环很简单,正常理解就行
// 唯一变化就是i+=2; 即每两个循环一次
for(let i=1;i<=2*num;i+=2) {
let s=inputArr[i], t=inputArr[i+1]
let result = fun(s, t);
if(result) {
console.log('YES')
console.log(result)
} else {
console.log('NO')
}
}
function fun(s, t) {
let j = 0; // 记录子串指针位置
for(let i=0; i<s.length; i++) {
// 子串不需要连续,所以只要相等或为'?'都可以替换
if(s[i] == t[j] || s[i] == '?') {
s = s.slice(0,i) + t[j] + s.slice(i+1, s.length)
j+=1
// 最终子串遍历完才符合条件即可返回
if(j >= t.length) {
s = s.replaceAll('?', 'a')
return s;
}
}
}
return false;
}
}()