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;
    }
}()