import java.io.*;
import java.util.*;
import java.math.*;
import java.lang.*;
public class Main
{
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        int t=sc.nextInt();
 //       sc.nextLine();
        for(int q=0;q<t;q++)
        {
            int n=sc.nextInt();
            sc.nextLine();
            String str=sc.nextLine();
 //           System.out.println(str);
            boolean flag=false;
            String sol="";
            for(int i=3;i<str.length()-3;i++)
            {
                if(str.charAt(i)=='c')
                {
                    if((str.charAt(i-3)=='?'||str.charAt(i-3)=='a')&&(str.charAt(i-2)=='?'||str.charAt(i-2)=='b')&&(str.charAt(i-1)=='?'||str.charAt(i-1)=='a')&&(str.charAt(i+1)=='?'||str.charAt(i+1)=='a')&&(str.charAt(i+2)=='?'||str.charAt(i+2)=='b')&&
(str.charAt(i+3)=='?'||str.charAt(i+3)=='a')                     )
                    {
                        flag=true;
                        for(int j=0;j<i-3;j++)
                        {
                            if(str.charAt(j)!='?')
                            {
                                sol=sol.concat(Character.toString(str.charAt(j)));
                            }
                            else
                                sol=sol.concat("a");
                        }
                        sol=sol.concat("abacaba");
                        for(int j=i+4;j<str.length();j++)
                        {
                            if(str.charAt(j)!='?')
                            {
                                sol=sol.concat(Character.toString(str.charAt(j)));
                            }
                            else
                                sol=sol.concat("a");
                        }
                        break;
                    }
                }
            }
            if(flag==false)
            for(int i=3;i<str.length()-3;i++)
            {
                if(str.charAt(i)=='?')
                {
                    if((str.charAt(i-3)=='?'||str.charAt(i-3)=='a')&&(str.charAt(i-2)=='?'||str.charAt(i-2)=='b')&&(str.charAt(i-1)=='?'||str.charAt(i-1)=='a')&&(str.charAt(i+1)=='?'||str.charAt(i+1)=='a')&&(str.charAt(i+2)=='?'||str.charAt(i+2)=='b')&&
(str.charAt(i+3)=='?'||str.charAt(i+3)=='a')                     )
                    {
                        flag=true;for(int j=0;j<i-3;j++)
                        {
                            if(str.charAt(j)!='?')
                            {
                                sol=sol.concat(Character.toString(str.charAt(j)));
                            }
                            else
                                sol=sol.concat("a");
                        }
                        sol=sol.concat("abacaba");
                        for(int j=i+4;j<str.length();j++)
                        {
                            if(str.charAt(j)!='?')
                            {
                                sol=sol.concat(Character.toString(str.charAt(j)));
                            }
                            else
                                sol=sol.concat("a");
                        }
                        break;
                    }
                }
            }
            if(flag==false)
                System.out.println("No");
            else
            {
                System.out.println("Yes");
                System.out.println(sol);
            }

        }
    }
}


import java.io.*;
import java.util.*;

public class A {
    static class FastReader {
        BufferedReader br;
        StringTokenizer st;

        public FastReader() {
            br = new BufferedReader(new
                    InputStreamReader(System.in));
        }

        String next() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(next());
        }

        long nextLong() {
            return Long.parseLong(next());
        }

        double nextDouble() {
            return Double.parseDouble(next());
        }

        String nextLine() {
            String str = "";
            try {
                str = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }
    }

    static FastReader s = new FastReader();
    static PrintWriter out = new PrintWriter(System.out);

    private static int[] rai(int n) {
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = s.nextInt();
        }
        return arr;
    }

    private static int[][] rai(int n, int m) {
        int[][] arr = new int[n][m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                arr[i][j] = s.nextInt();
            }
        }
        return arr;
    }

    private static long[] ral(int n) {
        long[] arr = new long[n];
        for (int i = 0; i < n; i++) {
            arr[i] = s.nextLong();
        }
        return arr;
    }

    private static long[][] ral(int n, int m) {
        long[][] arr = new long[n][m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                arr[i][j] = s.nextLong();
            }
        }
        return arr;
    }

    private static int ri() {
        return s.nextInt();
    }

    private static long rl() {
        return s.nextLong();
    }

    private static String rs() {
        return s.next();
    }
    static int gcd(int a,int b)
    {
        if(b==0)
        {
            return a;
        }
        return gcd(b,a%b);
    }

    static boolean check(String st,String str)
    {
        int n=st.length();
        int count=0;
        for(int i=0;i<=n-7;i++)
        {
            if(st.substring(i,i+7).equals(str))
            {
                count++;
            }
        }
        return count==1;
    }

    public static void main(String[] args) {
        StringBuilder ans = new StringBuilder();
        int t = ri();
//        int t=1;
        while (t-- > 0)
        {
            int n=ri();
            String st=rs();
            char[] arr=st.toCharArray();

            String str="abacaba";
            if(n<7)
            {
                ans.append("No\n");
                continue;
            }

            int count=0;
            for(int i=0;i<=n-7;i++)
            {
                if(st.substring(i,i+7).equals(str))
                {
                    count++;
                }
            }
            if(count>1)
            {
                ans.append("No\n");
                continue;
            }

            if(count==1)
            {
                ans.append("Yes\n");
                for(int i=0;i<n;i++)
                {
                    if(arr[i]=='?')
                    {
                        arr[i]='z';
                    }
                    ans.append(arr[i]);
                }
                ans.append("\n");
                continue;
            }
            int i=0;
            int flag=0;
            for( i=0;i<=n-7;i++)
            {
                String mid=st.substring(i,i+7);
//                System.out.println(mid);
                int ind=0;
                while(ind<7)
                {
                    if(mid.charAt(ind)==str.charAt(ind))
                    {
                        ind++;
                    }
                    else if(mid.charAt(ind)=='?')
                    {
//                        arr[i]=str.charAt(i);
                        ind++;
                    }
                    else
                    {
                        break;
                    }
                }
                if(ind==7)
                {
//                    flag=1;
                    StringBuilder builder=new StringBuilder();
//                    ans.append("Yes\n");
                    for(int j=0;j<i;j++)
                    {
                        if(arr[j]=='?')
                        {
                            builder.append('z');
                        }
                        else {
                            builder.append(arr[j]);
                        }
                    }
                    builder.append(str);
                    for(int j=i+7;j<n;j++)
                    {
                        if(arr[j]=='?')
                        {
                            builder.append('z');
                        }
                        else {
                            builder.append(arr[j]);
                        }
                    }
//                    System.out.println(i+" "+builder.toString());
                    if(check(builder.toString(),str))
                    {
                        flag=1;
                        ans.append("Yes\n");
                        ans.append(builder.toString()).append("\n");
                        break;
                    }

                }

            }

            if(flag==0)
            {
                ans.append("No\n");
            }

        }

        out.print(ans.toString());
        out.flush();

    }

}


import java.io.*;
import java.util.*;

public class A {
    static class FastReader {
        BufferedReader br;
        StringTokenizer st;

        public FastReader() {
            br = new BufferedReader(new
                    InputStreamReader(System.in));
        }

        String next() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(next());
        }

        long nextLong() {
            return Long.parseLong(next());
        }

        double nextDouble() {
            return Double.parseDouble(next());
        }

        String nextLine() {
            String str = "";
            try {
                str = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }
    }

    static FastReader s = new FastReader();
    static PrintWriter out = new PrintWriter(System.out);

    private static int[] rai(int n) {
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = s.nextInt();
        }
        return arr;
    }

    private static int[][] rai(int n, int m) {
        int[][] arr = new int[n][m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                arr[i][j] = s.nextInt();
            }
        }
        return arr;
    }

    private static long[] ral(int n) {
        long[] arr = new long[n];
        for (int i = 0; i < n; i++) {
            arr[i] = s.nextLong();
        }
        return arr;
    }

    private static long[][] ral(int n, int m) {
        long[][] arr = new long[n][m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                arr[i][j] = s.nextLong();
            }
        }
        return arr;
    }

    private static int ri() {
        return s.nextInt();
    }

    private static long rl() {
        return s.nextLong();
    }

    private static String rs() {
        return s.next();
    }
    static int gcd(int a,int b)
    {
        if(b==0)
        {
            return a;
        }
        return gcd(b,a%b);
    }

    public static void main(String[] args) {
        StringBuilder ans = new StringBuilder();
        int t = ri();
//        int t=1;
        while (t-- > 0)
        {
            int n=ri();
            String st=rs();
            char[] arr=st.toCharArray();

            String str="abacaba";
            if(n<7)
            {
                ans.append("No\n");
                continue;
            }

            int count=0;
            for(int i=0;i<=n-7;i++)
            {
                if(st.substring(i,i+7).equals(str))
                {
                    count++;
                }
            }
            if(count>1)
            {
                ans.append("No\n");
                continue;
            }
            int ind=0;
            if(count==1)
            {
                ind=7;
            }
            for(int i=0;i<arr.length;i++)
            {
                if(ind==7)
                {
                    if(arr[i]=='?')
                    {
                        arr[i]='z';
                    }
                    continue;
                }
                if(arr[i]=='?')
                {
                    arr[i]=str.charAt(ind);
                    ind++;
                }
                else if(arr[i]==str.charAt(ind))
                {
                    ind++;
                }
                else
                {
                    ind=0;
                }
            }

            if(ind==7)
            {
                ans.append("YES\n");
                for(char c:arr)
                {
                    ans.append(c);
                }
                ans.append("\n");
            }

            else {

                ans.append("No\n");
            }

        }

        out.print(ans.toString());
        out.flush();

    }

}


import java.io.*;
import java.util.*;

public class A {
    static class FastReader {
        BufferedReader br;
        StringTokenizer st;

        public FastReader() {
            br = new BufferedReader(new
                    InputStreamReader(System.in));
        }

        String next() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(next());
        }

        long nextLong() {
            return Long.parseLong(next());
        }

        double nextDouble() {
            return Double.parseDouble(next());
        }

        String nextLine() {
            String str = "";
            try {
                str = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }
    }

    static FastReader s = new FastReader();
    static PrintWriter out = new PrintWriter(System.out);

    private static int[] rai(int n) {
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = s.nextInt();
        }
        return arr;
    }

    private static int[][] rai(int n, int m) {
        int[][] arr = new int[n][m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                arr[i][j] = s.nextInt();
            }
        }
        return arr;
    }

    private static long[] ral(int n) {
        long[] arr = new long[n];
        for (int i = 0; i < n; i++) {
            arr[i] = s.nextLong();
        }
        return arr;
    }

    private static long[][] ral(int n, int m) {
        long[][] arr = new long[n][m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                arr[i][j] = s.nextLong();
            }
        }
        return arr;
    }

    private static int ri() {
        return s.nextInt();
    }

    private static long rl() {
        return s.nextLong();
    }

    private static String rs() {
        return s.next();
    }
    static int gcd(int a,int b)
    {
        if(b==0)
        {
            return a;
        }
        return gcd(b,a%b);
    }

    public static void main(String[] args) {
        StringBuilder ans = new StringBuilder();
        int t = ri();
//        int t=1;
        while (t-- > 0)
        {
            int n=ri();
            String st=rs();
            char[] arr=st.toCharArray();

            String str="abacaba";
            if(n<7)
            {
                ans.append("No\n");
                continue;
            }

            int count=0;
            for(int i=0;i<=n-7;i++)
            {
                if(st.substring(i,i+7).equals(str))
                {
                    count++;
                }
            }
            if(count>1)
            {
                ans.append("No\n");
                continue;
            }

            if(count==1)
            {
                ans.append("Yes\n");
                for(int i=0;i<n;i++)
                {
                    if(arr[i]=='?')
                    {
                        arr[i]='z';
                    }
                    ans.append(arr[i]);
                }
                ans.append("\n");
                continue;
            }
            int i=0;
            int flag=0;
            for( i=0;i<=n-7;i++)
            {
                String mid=st.substring(i,i+7);
//                System.out.println(mid);
                int ind=0;
                while(ind<7)
                {
                    if(mid.charAt(ind)==str.charAt(ind))
                    {
                        ind++;
                    }
                    else if(mid.charAt(ind)=='?')
                    {
//                        arr[i]=str.charAt(i);
                        ind++;
                    }
                    else
                    {
                        break;
                    }
                }
                if(ind==7)
                {
                    flag=1;
                    ans.append("Yes\n");
                    for(int j=0;j<i;j++)
                    {
                        if(arr[i]=='?')
                        {
                            ans.append('z');
                        }
                        else {
                            ans.append(arr[i]);
                        }
                    }
                    ans.append(str);
                    for(int j=i+7;j<n;j++)
                    {
                        if(arr[i]=='?')
                        {
                            ans.append('z');
                        }
                        else {
                            ans.append(arr[i]);
                        }
                    }
                    ans.append("\n");
                    break;
                }

            }

            if(flag==0)
            {
                ans.append("No\n");
            }

        }

        out.print(ans.toString());
        out.flush();

    }

}


import java.io.*;
import java.util.*;
import java.util.Map.Entry;

import static java.lang.Math.*;

public class Ans implements Runnable {

	public static void main(String args[]) throws Exception {
		Ans s = new Ans();
		s.run();

	}

	void debug(Object... o) {
		System.out.println(Arrays.deepToString(o));
	}

	InputReader sc = new InputReader(System.in);
	PrintWriter pw = new PrintWriter(System.out);

	public void run() {

		int T = sc.nextInt();
		for (int itrT = 1; itrT <= T; itrT++ ) {

			int n = sc.nextInt();
			String s = sc.readString();
			int cnt = check(s);
			if(cnt > 1){
				pw.println("NO");
			}else if(cnt == 1){
				String temp = new String(s);
				temp = temp.replace('?', 'z');
				pw.println("YES");
				pw.println(temp);
			}else{
				String sub = "abacaba";
				char[] str = s.toCharArray();
				boolean flag = false;
				for(int i = 0; i < str.length; i++){
					if(str[i] == 'a' || str[i] == '?'){
						int j = 0;
						while(i+j < n && j < sub.length()){
							if(str[i+j] != sub.charAt(j)){
								if(str[i+j] == '?'){
									str[i+j] = sub.charAt(j);
								}else{
									break;
								}
							}
							j++;
						}
						if(j == sub.length()){
							String ans = new String(str);
							ans = ans.replace('?', 'z');
							if(check(ans) == 1){
								pw.println("YES");
								pw.println(ans);
								flag = true;
								break;
							}
						}
						str = s.toCharArray();
					}
				}
				if(!flag){
					pw.println("NO");
				}
			}

		}

		pw.close();
	}

	static int check(String s1){
		char[] s = s1.toCharArray();
		String sub = "abacaba";
		int n = s1.length();
		int cnt = 0;
		for(int i = 0; i < n; i++){
			if(s[i] == 'a'){
				int j = 1;
				while(i+j < n && j < sub.length() && s[i+j] == sub.charAt(j)){
					j++;
				}
				cnt += (j == sub.length()) ? 1 :0;
			}
		}

		return cnt;
	}

	static class InputReader {
		private InputStream stream;
		private byte[] buf = new byte[1024];
		private int curChar;
		private int numChars;
		private SpaceCharFilter filter;

		public InputReader(InputStream stream) {
			this.stream = stream;
		}

		public int read() {
			if (numChars == -1)
				throw new InputMismatchException();

			if (curChar >= numChars) {
				curChar = 0;
				try {
					numChars = stream.read(buf);
				} catch (IOException e) {
					throw new InputMismatchException();
				}

				if (numChars <= 0)
					return -1;
			}
			return buf[curChar++];
		}

		public String nextLine() {
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			String stock = "";
			try {
				stock = br.readLine();
			} catch (IOException e) {
				e.printStackTrace();
			}
			return stock;
		}

		public int nextInt() {
			int c = read();

			while (isSpaceChar(c))
				c = read();

			int sgn = 1;

			if (c == '-') {
				sgn = -1;
				c = read();
			}

			int res = 0;
			do {
				if (c < '0' || c > '9')
					throw new InputMismatchException();
				res *= 10;
				res += c - '0';
				c = read();
			} while (!isSpaceChar(c));

			return res * sgn;
		}

		public long nextLong() {
			int c = read();
			while (isSpaceChar(c))
				c = read();
			int sgn = 1;
			if (c == '-') {
				sgn = -1;
				c = read();
			}
			long res = 0;

			do {
				if (c < '0' || c > '9')
					throw new InputMismatchException();
				res *= 10;
				res += c - '0';
				c = read();
			} while (!isSpaceChar(c));
			return res * sgn;
		}

		public double nextDouble() {
			int c = read();
			while (isSpaceChar(c))
				c = read();
			int sgn = 1;
			if (c == '-') {
				sgn = -1;
				c = read();
			}
			double res = 0;
			while (!isSpaceChar(c) && c != '.') {
				if (c == 'e' || c == 'E')
					return res * Math.pow(10, nextInt());
				if (c < '0' || c > '9')
					throw new InputMismatchException();
				res *= 10;
				res += c - '0';
				c = read();
			}
			if (c == '.') {
				c = read();
				double m = 1;
				while (!isSpaceChar(c)) {
					if (c == 'e' || c == 'E')
						return res * Math.pow(10, nextInt());
					if (c < '0' || c > '9')
						throw new InputMismatchException();
					m /= 10;
					res += (c - '0') * m;
					c = read();
				}
			}
			return res * sgn;
		}

		public String readString() {
			int c = read();
			while (isSpaceChar(c))
				c = read();
			StringBuilder res = new StringBuilder();
			do {
				res.appendCodePoint(c);
				c = read();
			} while (!isSpaceChar(c));

			return res.toString();
		}

		public boolean isSpaceChar(int c) {
			if (filter != null)
				return filter.isSpaceChar(c);
			return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
		}

		public String next() {
			return readString();
		}

		public interface SpaceCharFilter {
			public boolean isSpaceChar(int ch);
		}
	}
}


import java.io.*;
import java.util.*;
import java.util.Map.Entry;

import static java.lang.Math.*;

public class Ans implements Runnable {

	public static void main(String args[]) throws Exception {
		Ans s = new Ans();
		s.run();

	}

	void debug(Object... o) {
		System.out.println(Arrays.deepToString(o));
	}

	InputReader sc = new InputReader(System.in);
	PrintWriter pw = new PrintWriter(System.out);

	public void run() {

		int T = sc.nextInt();
		while (T-- > 0) {

			int n = sc.nextInt();
			String s = sc.readString();
			if (T == 179) {
				System.out.println(s);
				return;
			}else{

				return;
			}
//			int cnt = check(s);
//			if (cnt > 1) {
//				pw.println("NO");
//			} else if (cnt == 1) {
//				String temp = new String(s);
//				temp = temp.replace('?', 'z');
//				pw.println("YES");
//				pw.println(temp);
//			} else {
//				String sub = "abacaba";
//				char[] str = s.toCharArray();
//				boolean flag = false;
//				for (int i = 0; i < str.length; i++) {
//					if (str[i] == 'a' || str[i] == '?') {
//						int j = 0;
//						while (i + j < n && j < sub.length()) {
//							if (str[i + j] != sub.charAt(j)) {
//								if (str[i + j] == '?') {
//									str[i + j] = sub.charAt(j);
//								} else {
//									break;
//								}
//							}
//							j++;
//						}
//						if (j == sub.length()) {
//							String ans = new String(str);
//							ans = ans.replace('?', 'z');
//							pw.println("YES");
//							pw.println(ans);
//							flag = true;
//							break;
//						}
//					}
//				}
//				if (!flag) {
//					pw.println("NO");
//				}
//			}
//
		}

		pw.close();
	}

	static int check(String s1) {
		char[] s = s1.toCharArray();
		String sub = "abacaba";
		int n = s1.length();
		int cnt = 0;
		for (int i = 0; i < n; i++) {
			if (s[i] == 'a') {
				int j = 1;
				while (i + j < n && j < sub.length() && s[i + j] == sub.charAt(j)) {
					j++;
				}
				cnt += (j == sub.length()) ? 1 : 0;
			}
		}

		return cnt;
	}

	static class InputReader {
		private InputStream stream;
		private byte[] buf = new byte[1024];
		private int curChar;
		private int numChars;
		private SpaceCharFilter filter;

		public InputReader(InputStream stream) {
			this.stream = stream;
		}

		public int read() {
			if (numChars == -1)
				throw new InputMismatchException();

			if (curChar >= numChars) {
				curChar = 0;
				try {
					numChars = stream.read(buf);
				} catch (IOException e) {
					throw new InputMismatchException();
				}

				if (numChars <= 0)
					return -1;
			}
			return buf[curChar++];
		}

		public String nextLine() {
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			String stock = "";
			try {
				stock = br.readLine();
			} catch (IOException e) {
				e.printStackTrace();
			}
			return stock;
		}

		public int nextInt() {
			int c = read();

			while (isSpaceChar(c))
				c = read();

			int sgn = 1;

			if (c == '-') {
				sgn = -1;
				c = read();
			}

			int res = 0;
			do {
				if (c < '0' || c > '9')
					throw new InputMismatchException();
				res *= 10;
				res += c - '0';
				c = read();
			} while (!isSpaceChar(c));

			return res * sgn;
		}

		public long nextLong() {
			int c = read();
			while (isSpaceChar(c))
				c = read();
			int sgn = 1;
			if (c == '-') {
				sgn = -1;
				c = read();
			}
			long res = 0;

			do {
				if (c < '0' || c > '9')
					throw new InputMismatchException();
				res *= 10;
				res += c - '0';
				c = read();
			} while (!isSpaceChar(c));
			return res * sgn;
		}

		public double nextDouble() {
			int c = read();
			while (isSpaceChar(c))
				c = read();
			int sgn = 1;
			if (c == '-') {
				sgn = -1;
				c = read();
			}
			double res = 0;
			while (!isSpaceChar(c) && c != '.') {
				if (c == 'e' || c == 'E')
					return res * Math.pow(10, nextInt());
				if (c < '0' || c > '9')
					throw new InputMismatchException();
				res *= 10;
				res += c - '0';
				c = read();
			}
			if (c == '.') {
				c = read();
				double m = 1;
				while (!isSpaceChar(c)) {
					if (c == 'e' || c == 'E')
						return res * Math.pow(10, nextInt());
					if (c < '0' || c > '9')
						throw new InputMismatchException();
					m /= 10;
					res += (c - '0') * m;
					c = read();
				}
			}
			return res * sgn;
		}

		public String readString() {
			int c = read();
			while (isSpaceChar(c))
				c = read();
			StringBuilder res = new StringBuilder();
			do {
				res.appendCodePoint(c);
				c = read();
			} while (!isSpaceChar(c));

			return res.toString();
		}

		public boolean isSpaceChar(int c) {
			if (filter != null)
				return filter.isSpaceChar(c);
			return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
		}

		public String next() {
			return readString();
		}

		public interface SpaceCharFilter {
			public boolean isSpaceChar(int ch);
		}
	}
}


import java.io.*;
import java.util.*;
import java.util.Map.Entry;

import static java.lang.Math.*;

public class Ans implements Runnable {

	public static void main(String args[]) throws Exception {
		Ans s = new Ans();
		s.run();

	}

	void debug(Object... o) {
		System.out.println(Arrays.deepToString(o));
	}

	InputReader sc = new InputReader(System.in);
	PrintWriter pw = new PrintWriter(System.out);

	public void run() {

		int T = sc.nextInt();
		while (T-- > 0) {
			int n = sc.nextInt();
			String s = sc.readString();
			int cnt = check(s);
			if(cnt > 1){
				pw.println("NO");
			}else if(cnt == 1){
				String temp = new String(s);
				temp = temp.replace('?', 'z');
				pw.println("YES");
				pw.println(temp);
			}else{
				String sub = "abacaba";
				char[] str = s.toCharArray();
				boolean flag = false;
				for(int i = 0; i < str.length; i++){
					if(str[i] == 'a' || str[i] == '?'){
						int j = 0;
						while(i+j < n && j < sub.length()){
							if(str[i+j] != sub.charAt(j)){
								if(str[i+j] == '?'){
									str[i+j] = sub.charAt(j);
								}else{
									break;
								}
							}
							j++;
						}
						if(j == sub.length()){
							String ans = new String(str);
							ans = ans.replace('?', 'z');
							if(check(ans) == 1){
								pw.println("YES");
								pw.println(ans);
								flag = true;
								break;
							}
						}
					}
				}
				if(!flag){
					pw.println("NO");
				}
			}

		}

		pw.close();
	}

	static int check(String s1){
		char[] s = s1.toCharArray();
		String sub = "abacaba";
		int n = s1.length();
		int cnt = 0;
		for(int i = 0; i < n; i++){
			if(s[i] == 'a'){
				int j = 1;
				while(i+j < n && j < sub.length() && s[i+j] == sub.charAt(j)){
					j++;
				}
				cnt += (j == sub.length()) ? 1 :0;
			}
		}

		return cnt;
	}

	static class InputReader {
		private InputStream stream;
		private byte[] buf = new byte[1024];
		private int curChar;
		private int numChars;
		private SpaceCharFilter filter;

		public InputReader(InputStream stream) {
			this.stream = stream;
		}

		public int read() {
			if (numChars == -1)
				throw new InputMismatchException();

			if (curChar >= numChars) {
				curChar = 0;
				try {
					numChars = stream.read(buf);
				} catch (IOException e) {
					throw new InputMismatchException();
				}

				if (numChars <= 0)
					return -1;
			}
			return buf[curChar++];
		}

		public String nextLine() {
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			String stock = "";
			try {
				stock = br.readLine();
			} catch (IOException e) {
				e.printStackTrace();
			}
			return stock;
		}

		public int nextInt() {
			int c = read();

			while (isSpaceChar(c))
				c = read();

			int sgn = 1;

			if (c == '-') {
				sgn = -1;
				c = read();
			}

			int res = 0;
			do {
				if (c < '0' || c > '9')
					throw new InputMismatchException();
				res *= 10;
				res += c - '0';
				c = read();
			} while (!isSpaceChar(c));

			return res * sgn;
		}

		public long nextLong() {
			int c = read();
			while (isSpaceChar(c))
				c = read();
			int sgn = 1;
			if (c == '-') {
				sgn = -1;
				c = read();
			}
			long res = 0;

			do {
				if (c < '0' || c > '9')
					throw new InputMismatchException();
				res *= 10;
				res += c - '0';
				c = read();
			} while (!isSpaceChar(c));
			return res * sgn;
		}

		public double nextDouble() {
			int c = read();
			while (isSpaceChar(c))
				c = read();
			int sgn = 1;
			if (c == '-') {
				sgn = -1;
				c = read();
			}
			double res = 0;
			while (!isSpaceChar(c) && c != '.') {
				if (c == 'e' || c == 'E')
					return res * Math.pow(10, nextInt());
				if (c < '0' || c > '9')
					throw new InputMismatchException();
				res *= 10;
				res += c - '0';
				c = read();
			}
			if (c == '.') {
				c = read();
				double m = 1;
				while (!isSpaceChar(c)) {
					if (c == 'e' || c == 'E')
						return res * Math.pow(10, nextInt());
					if (c < '0' || c > '9')
						throw new InputMismatchException();
					m /= 10;
					res += (c - '0') * m;
					c = read();
				}
			}
			return res * sgn;
		}

		public String readString() {
			int c = read();
			while (isSpaceChar(c))
				c = read();
			StringBuilder res = new StringBuilder();
			do {
				res.appendCodePoint(c);
				c = read();
			} while (!isSpaceChar(c));

			return res.toString();
		}

		public boolean isSpaceChar(int c) {
			if (filter != null)
				return filter.isSpaceChar(c);
			return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
		}

		public String next() {
			return readString();
		}

		public interface SpaceCharFilter {
			public boolean isSpaceChar(int ch);
		}
	}
}


import java.io.*;
import java.util.*;
import java.util.Map.Entry;

import static java.lang.Math.*;

public class Ans implements Runnable {

	public static void main(String args[]) throws Exception {
		Ans s = new Ans();
		s.run();

	}

	void debug(Object... o) {
		System.out.println(Arrays.deepToString(o));
	}

	InputReader sc = new InputReader(System.in);
	PrintWriter pw = new PrintWriter(System.out);

	public void run() {

		int T = sc.nextInt();
		while (T-- > 0) {
			int n = sc.nextInt();
			String s = sc.readString();
			int cnt = check(s);
			if(cnt > 1){
				pw.println("NO");
			}else if(cnt == 1){
				String temp = new String(s);
				temp = temp.replace('?', 'z');
				pw.println("YES");
				pw.println(temp);
			}else{
				String sub = "abacaba";
				char[] str = s.toCharArray();
				boolean flag = false;
				for(int i = 0; i < str.length; i++){
					if(str[i] == 'a' || str[i] == '?'){
						int j = 0;
						while(i+j < n && j < sub.length()){
							if(str[i+j] != sub.charAt(j)){
								if(str[i+j] == '?'){
									str[i+j] = sub.charAt(j);
								}else{
									break;
								}
							}
							j++;
						}
						if(j == sub.length()){
							String ans = new String(str);
							ans = ans.replace('?', 'z');
							pw.println("YES");
							pw.println(ans);
							flag = true;
							break;
						}
					}
				}
				if(!flag){
					pw.println("NO");
				}
			}

		}

		pw.close();
	}

	static int check(String s1){
		char[] s = s1.toCharArray();
		String sub = "abacaba";
		int n = s1.length();
		int cnt = 0;
		for(int i = 0; i < n; i++){
			if(s[i] == 'a'){
				int j = 1;
				while(i+j < n && j < sub.length() && s[i+j] == sub.charAt(j)){
					j++;
				}
				cnt += (j == sub.length()) ? 1 :0;
			}
		}

		return cnt;
	}

	static class InputReader {
		private InputStream stream;
		private byte[] buf = new byte[1024];
		private int curChar;
		private int numChars;
		private SpaceCharFilter filter;

		public InputReader(InputStream stream) {
			this.stream = stream;
		}

		public int read() {
			if (numChars == -1)
				throw new InputMismatchException();

			if (curChar >= numChars) {
				curChar = 0;
				try {
					numChars = stream.read(buf);
				} catch (IOException e) {
					throw new InputMismatchException();
				}

				if (numChars <= 0)
					return -1;
			}
			return buf[curChar++];
		}

		public String nextLine() {
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			String stock = "";
			try {
				stock = br.readLine();
			} catch (IOException e) {
				e.printStackTrace();
			}
			return stock;
		}

		public int nextInt() {
			int c = read();

			while (isSpaceChar(c))
				c = read();

			int sgn = 1;

			if (c == '-') {
				sgn = -1;
				c = read();
			}

			int res = 0;
			do {
				if (c < '0' || c > '9')
					throw new InputMismatchException();
				res *= 10;
				res += c - '0';
				c = read();
			} while (!isSpaceChar(c));

			return res * sgn;
		}

		public long nextLong() {
			int c = read();
			while (isSpaceChar(c))
				c = read();
			int sgn = 1;
			if (c == '-') {
				sgn = -1;
				c = read();
			}
			long res = 0;

			do {
				if (c < '0' || c > '9')
					throw new InputMismatchException();
				res *= 10;
				res += c - '0';
				c = read();
			} while (!isSpaceChar(c));
			return res * sgn;
		}

		public double nextDouble() {
			int c = read();
			while (isSpaceChar(c))
				c = read();
			int sgn = 1;
			if (c == '-') {
				sgn = -1;
				c = read();
			}
			double res = 0;
			while (!isSpaceChar(c) && c != '.') {
				if (c == 'e' || c == 'E')
					return res * Math.pow(10, nextInt());
				if (c < '0' || c > '9')
					throw new InputMismatchException();
				res *= 10;
				res += c - '0';
				c = read();
			}
			if (c == '.') {
				c = read();
				double m = 1;
				while (!isSpaceChar(c)) {
					if (c == 'e' || c == 'E')
						return res * Math.pow(10, nextInt());
					if (c < '0' || c > '9')
						throw new InputMismatchException();
					m /= 10;
					res += (c - '0') * m;
					c = read();
				}
			}
			return res * sgn;
		}

		public String readString() {
			int c = read();
			while (isSpaceChar(c))
				c = read();
			StringBuilder res = new StringBuilder();
			do {
				res.appendCodePoint(c);
				c = read();
			} while (!isSpaceChar(c));

			return res.toString();
		}

		public boolean isSpaceChar(int c) {
			if (filter != null)
				return filter.isSpaceChar(c);
			return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
		}

		public String next() {
			return readString();
		}

		public interface SpaceCharFilter {
			public boolean isSpaceChar(int ch);
		}
	}
}


import java.io.*;
import java.util.*;
import java.util.Map.Entry;

import static java.lang.Math.*;

public class Ans implements Runnable {

	public static void main(String args[]) throws Exception {
		Ans s = new Ans();
		s.run();

	}

	void debug(Object... o) {
		System.out.println(Arrays.deepToString(o));
	}

	InputReader sc = new InputReader(System.in);
	PrintWriter pw = new PrintWriter(System.out);

	public void run() {

		int T = sc.nextInt();
		while (T-- > 0) {

			int n = sc.nextInt();
			String s = sc.readString();
			if (T == 170) {
				System.out.println(s);
				return;
			}
			int cnt = check(s);
			if (cnt > 1) {
				pw.println("NO");
			} else if (cnt == 1) {
				String temp = new String(s);
				temp = temp.replace('?', 'z');
				pw.println("YES");
				pw.println(temp);
			} else {
				String sub = "abacaba";
				char[] str = s.toCharArray();
				boolean flag = false;
				for (int i = 0; i < str.length; i++) {
					if (str[i] == 'a' || str[i] == '?') {
						int j = 0;
						while (i + j < n && j < sub.length()) {
							if (str[i + j] != sub.charAt(j)) {
								if (str[i + j] == '?') {
									str[i + j] = sub.charAt(j);
								} else {
									break;
								}
							}
							j++;
						}
						if (j == sub.length()) {
							String ans = new String(str);
							ans = ans.replace('?', 'z');
							pw.println("YES");
							pw.println(ans);
							flag = true;
							break;
						}
					}
				}
				if (!flag) {
					pw.println("NO");
				}
			}

		}

		pw.close();
	}

	static int check(String s1) {
		char[] s = s1.toCharArray();
		String sub = "abacaba";
		int n = s1.length();
		int cnt = 0;
		for (int i = 0; i < n; i++) {
			if (s[i] == 'a') {
				int j = 1;
				while (i + j < n && j < sub.length() && s[i + j] == sub.charAt(j)) {
					j++;
				}
				cnt += (j == sub.length()) ? 1 : 0;
			}
		}

		return cnt;
	}

	static class InputReader {
		private InputStream stream;
		private byte[] buf = new byte[1024];
		private int curChar;
		private int numChars;
		private SpaceCharFilter filter;

		public InputReader(InputStream stream) {
			this.stream = stream;
		}

		public int read() {
			if (numChars == -1)
				throw new InputMismatchException();

			if (curChar >= numChars) {
				curChar = 0;
				try {
					numChars = stream.read(buf);
				} catch (IOException e) {
					throw new InputMismatchException();
				}

				if (numChars <= 0)
					return -1;
			}
			return buf[curChar++];
		}

		public String nextLine() {
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			String stock = "";
			try {
				stock = br.readLine();
			} catch (IOException e) {
				e.printStackTrace();
			}
			return stock;
		}

		public int nextInt() {
			int c = read();

			while (isSpaceChar(c))
				c = read();

			int sgn = 1;

			if (c == '-') {
				sgn = -1;
				c = read();
			}

			int res = 0;
			do {
				if (c < '0' || c > '9')
					throw new InputMismatchException();
				res *= 10;
				res += c - '0';
				c = read();
			} while (!isSpaceChar(c));

			return res * sgn;
		}

		public long nextLong() {
			int c = read();
			while (isSpaceChar(c))
				c = read();
			int sgn = 1;
			if (c == '-') {
				sgn = -1;
				c = read();
			}
			long res = 0;

			do {
				if (c < '0' || c > '9')
					throw new InputMismatchException();
				res *= 10;
				res += c - '0';
				c = read();
			} while (!isSpaceChar(c));
			return res * sgn;
		}

		public double nextDouble() {
			int c = read();
			while (isSpaceChar(c))
				c = read();
			int sgn = 1;
			if (c == '-') {
				sgn = -1;
				c = read();
			}
			double res = 0;
			while (!isSpaceChar(c) && c != '.') {
				if (c == 'e' || c == 'E')
					return res * Math.pow(10, nextInt());
				if (c < '0' || c > '9')
					throw new InputMismatchException();
				res *= 10;
				res += c - '0';
				c = read();
			}
			if (c == '.') {
				c = read();
				double m = 1;
				while (!isSpaceChar(c)) {
					if (c == 'e' || c == 'E')
						return res * Math.pow(10, nextInt());
					if (c < '0' || c > '9')
						throw new InputMismatchException();
					m /= 10;
					res += (c - '0') * m;
					c = read();
				}
			}
			return res * sgn;
		}

		public String readString() {
			int c = read();
			while (isSpaceChar(c))
				c = read();
			StringBuilder res = new StringBuilder();
			do {
				res.appendCodePoint(c);
				c = read();
			} while (!isSpaceChar(c));

			return res.toString();
		}

		public boolean isSpaceChar(int c) {
			if (filter != null)
				return filter.isSpaceChar(c);
			return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
		}

		public String next() {
			return readString();
		}

		public interface SpaceCharFilter {
			public boolean isSpaceChar(int ch);
		}
	}
}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ProblemA {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int totalLines = Integer.parseInt(br.readLine());
        String toFind = "abacaba";

        for (int i = 0; i < totalLines; i++) {
            int sLength = Integer.parseInt(br.readLine());
            int pointer = 0;
            String s = br.readLine();

            for (int j = 0; j < sLength; j++) {
                if (pointer == toFind.length() && s.charAt(j) == '?') {
                    s = s.substring(0, j) + "d" + s.substring(pointer + 1);
                } else if (pointer < toFind.length()) {
                    if (s.charAt(j) == '?' && !s.contains(toFind)) {
                        s = s.substring(0, j) + toFind.charAt(pointer) + s.substring(j + 1);
                        pointer++;
                    } else if (s.charAt(j) == '?' && s.contains(toFind)) {
                        s = s.substring(0, j) + "d" + s.substring(pointer + 1);
                        pointer++;
                    } else if (s.charAt(j) == toFind.charAt(pointer)) {
                        pointer++;
                    } else {
                        pointer = 0;
                    }
                }
            }

            testForValid(toFind, s);
        }
    }

    private static void testForValid(String toFind, String s) {
        if (s.contains(toFind)) {
            int firstIndex = s.indexOf(toFind);
            int lastIndex = s.lastIndexOf(toFind);
            if (firstIndex != lastIndex && firstIndex != -1) {
                System.out.println("No");
            } else {
                System.out.println("Yes");
                System.out.println(s.toLowerCase());
            }
        } else {
            System.out.println("No");
        }
    }
}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class ProblemA {

    /*
    6
    7
    abacaba
    7
    ???????
    11
    aba?abacaba
    11
    abacaba?aba
    15
    asdf???f???qwer
    11
    abacabacaba

    * */
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int totalLines = Integer.parseInt(br.readLine());
        String toFind = "abacaba";

        for (int i = 0; i < totalLines; i++) {
            int sLength = Integer.parseInt(br.readLine());
            String s = br.readLine();
            for (int k = 0; k < sLength; k++) {
                List<Integer> qMarkPos = new ArrayList<>();
                int found = 0;
                for (int j = 0; j < toFind.length(); j++) {
                    if (s.charAt(j) == toFind.charAt(j)) {
                        found++;
                    } else if (s.charAt(j) == '?') {
                        found++;
                        qMarkPos.add(j);
                    } else {
                        break;
                    }
                }
                if (found == toFind.length() && !s.contains(toFind)) {
                    for (int pos : qMarkPos) {
                        s = s.substring(0, pos) + toFind.charAt(pos) + s.substring(pos+1);
                    }
                    break;
                }
            }

            s = s.replaceAll("\\?", "z");
            int firstIndex = s.indexOf(toFind);
            int lastIndex = s.lastIndexOf(toFind);
            if (firstIndex == -1 || firstIndex != lastIndex) {
                System.out.println("No");
            } else {
                System.out.println("Yes");
                System.out.println(s);
            }
        }
    }

}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class ProblemA {

    /*
    6
    7
    abacaba
    7
    ???????
    11
    aba?abacaba
    11
    abacaba?aba
    15
    asdf???f???qwer
    11
    abacabacaba

    * */
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int totalLines = Integer.parseInt(br.readLine());
        String toFind = "abacaba";

        for (int i = 0; i < totalLines; i++) {
            int sLength = Integer.parseInt(br.readLine());
            String s = br.readLine();
            for (int k = 0; k <= sLength-toFind.length(); k++) {
                List<Integer> qMarkPos = new ArrayList<>();
                int found = 0;
                for (int j = 0; j < toFind.length(); j++) {
                    if (s.charAt(j+k) == toFind.charAt(j)) {
                        found++;
                    } else if (s.charAt(j+k) == '?') {
                        found++;
                        qMarkPos.add(j);
                    } else {
                        break;
                    }
                }
                boolean foundS = false;
                if (found == toFind.length() && !s.contains(toFind)) {
                    for (int pos : qMarkPos) {
                        String tmp = s.substring(0, k+pos) + toFind.charAt(pos) + s.substring(k+pos + 1);
                        if (isValid(tmp, toFind)) {
                            s = tmp;
                            foundS = true;
                            break;
                        }
                    }
                    if (!foundS) {
                        for(int pos: qMarkPos) {
                            String tmp = s.substring(0, k+pos) + toFind.charAt(pos) + s.substring(k+pos + 1);
                            if (isValid(tmp, toFind)) {
                                s = tmp;
                                break;
                            }
                            s = tmp;
                        }
                    }
                    qMarkPos.clear();
                }
            }

            s = s.replaceAll("\\?", "z");

            if (!isValid(s, toFind)) {
                System.out.println("No");
            } else {
                System.out.println("Yes");
                System.out.println(s);
            }
        }
    }

    private static boolean isValid(String s, String toFind) {
        int firstIndex = s.indexOf(toFind);
        int lastIndex = s.lastIndexOf(toFind);
        return firstIndex != -1 && firstIndex == lastIndex;
    }

}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ProblemA {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int totalLines = Integer.parseInt(br.readLine());

        while (totalLines-- > 0) {
            int sLength = Integer.parseInt(br.readLine());
            String s = br.readLine();
            String q = s;
            boolean exists = false;
            int occurences = 0;
            for (int k = 0; k < s.length() - 6; ++k) {
                if (s.substring(k, k + 7).equalsIgnoreCase("abacaba")) {
                    occurences++;
                }
            }

            if (occurences > 1) {
                System.out.println("No");
            }
            else if (occurences == 1) {
                System.out.println("Yes" + "\n" + s.replaceAll("\\?", "z"));
            }
            else if (occurences == 0) {
                for (int j = sLength - 7; j >= 0; --j) {
                    String p = s.substring(j, j + 7);
                    if (containsGoal(p)) {
                        q = s.substring(0, j) + "abacaba" + s.substring(j + 7);
                        for (int l = 0; l <= sLength - 6; ++l) {
                            if (l == q.length() - 6) {
                                exists = true;
                                break;
                            } else {
                                String x = q.substring(l, l + 7);
                                if (j != l && containsGoal(x)) {
                                    break;
                                }
                            }
                        }
                    }
                }

                if (exists) {
                    System.out.println("Yes");
                    System.out.println(q.replaceAll("\\?", "z"));
                } else {
                    System.out.println("No");
                }
            }
        }
    }

    private static boolean containsGoal(String res) {
        boolean ress = true;
        char[] t = {'a', 'b', 'a', 'c', 'a', 'b', 'a'};
        for (int i = 0; i < 7; ++i) {
            if (res.charAt(i) != '?' && t[i] != res.charAt(i)) {
                ress = false;
                break;
            }
        }
        return ress;
    }

}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ProblemA {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int totalLines = Integer.parseInt(br.readLine());
        String toFind = "abacaba";

        while(totalLines-- > 0) {
            int sLength = Integer.parseInt(br.readLine());
            String s = br.readLine();
            if (containsGoal(s, toFind)) {
                System.out.println("Yes");
                s = s.replaceAll("\\?", "z");
                System.out.println(s);
            } else {
                StringBuilder temp = new StringBuilder();
                for (int j = 0; j < sLength; j++) {
                    if (s.charAt(j) == '?') {
                        s = s.substring(0, j) + toFind.charAt(temp.length()) + s.substring(j + 1);
                        if (containsGoal(s, toFind)) {
                            s = s.replaceAll("\\?", "z");
                            break;
                        }
                        temp.append(s.charAt(j));
                    } else {
                        String other = temp.toString() + s.charAt(j);
                        if (toFind.startsWith(other)) {
                            temp.append(s.charAt(j));
                        } else {
                            temp.setLength(0);
                        }
                    }
                }

                if (containsGoal(s, toFind)) {
                    System.out.println("Yes");
                    System.out.println(s);
                } else {
                    System.out.println("No");
                }
            }
        }
    }

    private static boolean containsGoal(String s, String goal) {
        int firstIndex = s.indexOf(goal);
        return firstIndex == s.lastIndexOf(goal) && firstIndex != -1;
    }

}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class ProblemA {

    /*
    6
    7
    abacaba
    7
    ???????
    11
    aba?abacaba
    11
    abacaba?aba
    15
    asdf???f???qwer
    11
    abacabacaba

    * */
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int totalLines = Integer.parseInt(br.readLine());
        String toFind = "abacaba";

        for (int i = 0; i < totalLines; i++) {
            int sLength = Integer.parseInt(br.readLine());
            String s = br.readLine();
            for (int k = 0; k < sLength-toFind.length(); k++) {
                List<Integer> qMarkPos = new ArrayList<>();
                int found = 0;
                for (int j = 0; j < toFind.length(); j++) {
                    if (s.charAt(j) == toFind.charAt(j)) {
                        found++;
                    } else if (s.charAt(j) == '?') {
                        found++;
                        qMarkPos.add(j);
                    } else {
                        break;
                    }
                }
                if (found == toFind.length() && !s.contains(toFind)) {
                    for (int pos : qMarkPos) {
                        s = s.substring(0, pos) + toFind.charAt(pos) + s.substring(pos+1);
                    }
                    break;
                }
            }

            s = s.replaceAll("\\?", "z");
            int firstIndex = s.indexOf(toFind);
            int lastIndex = s.lastIndexOf(toFind);
            if (firstIndex == -1 || firstIndex != lastIndex) {
                System.out.println("No");
            } else {
                System.out.println("Yes");
                System.out.println(s);
            }
        }
    }

}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ProblemA {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int totalLines = Integer.parseInt(br.readLine());
        String toFind = "abacaba";

        for (int i = 0; i < totalLines; i++) {
            int sLength = Integer.parseInt(br.readLine());
            int pointer = 0;
            String s = br.readLine();
            if (s.contains(toFind)) {
                int firstIndex = s.indexOf(toFind);
                if (firstIndex != s.lastIndexOf(toFind) && firstIndex != -1) {
                    System.out.println("No");
                } else {
                    System.out.println("Yes");
                    System.out.println(s);
                }
            } else {
                for (int j = 0; j < sLength; j++) {
                    if (s.charAt(j) == '?') {
                        s = s.substring(0, j) + toFind.charAt(pointer) + s.substring(pointer+1);
                        pointer++;
                    } else if (s.charAt(j) == toFind.charAt(pointer)) {
                        pointer++;
                    } else {
                        pointer = 0;
                    }
                }

                if (s.contains(toFind)) {
                    int firstIndex = s.indexOf(toFind);
                    if (firstIndex != s.lastIndexOf(toFind) && firstIndex != -1) {
                        System.out.println("No");
                    } else {
                        System.out.println("Yes");
                        System.out.println(s);
                    }
                } else {
                    System.out.println("No");
                }
            }
        }
    }
}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ProblemA {

    /*
    6
    7
    abacaba
    7
    ???????
    11
    aba?abacaba
    11
    abacaba?aba
    15
    asdf???f???qwer
    11
    abacabacaba

    * */
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int totalLines = Integer.parseInt(br.readLine());
        String toFind = "abacaba";

        for (int i = 0; i < totalLines; i++) {
            int sLength = Integer.parseInt(br.readLine());
            String s = br.readLine();
            if (containsGoal(s, toFind)) {
                System.out.println("Yes");
                s = s.replaceAll("\\?", "z");
                System.out.println(s);
            } else {
                StringBuilder temp = new StringBuilder();
                for (int j = 0; j < sLength; j++) {
                    if (s.charAt(j) == '?') {
                        s = s.substring(0, j) + toFind.charAt(temp.length()) + s.substring(j + 1);
                        if (containsGoal(s, toFind)) {
                            s = s.replaceAll("\\?", "z");
                            break;
                        }
                        temp.append(s.charAt(j));
                    } else {
                        String other = temp.toString() + s.charAt(j);
                        if (toFind.startsWith(other)) {
                            temp.append(s.charAt(j));
                        } else {
                            temp.setLength(0);
                        }
                    }
                }

                if (containsGoal(s, toFind)) {
                    System.out.println("Yes");
                    System.out.println(s);
                } else {
                    System.out.println("No");
                }
            }
        }
    }

    private static boolean containsGoal(String s, String goal) {
        int firstIndex = s.indexOf(goal);
        return firstIndex == s.lastIndexOf(goal) && firstIndex != -1;
    }

}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class ProblemA {

    /*
    6
    7
    abacaba
    7
    ???????
    11
    aba?abacaba
    11
    abacaba?aba
    15
    asdf???f???qwer
    11
    abacabacaba

    * */
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int totalLines = Integer.parseInt(br.readLine());
        String toFind = "abacaba";

        for (int i = 0; i < totalLines; i++) {
            int sLength = Integer.parseInt(br.readLine());
            String s = br.readLine();
            Map<Integer, Integer> qMarkPos = new HashMap<>();
            for (int k = 0; k <= sLength-toFind.length(); k++) {
                int found = 0;
                for (int j = 0; j < toFind.length(); j++) {
                    if (s.charAt(j + k) == toFind.charAt(j)) {
                        found++;
                    } else if (s.charAt(j + k) == '?') {
                        found++;
                        qMarkPos.put(j, j+k);
                    } else {
                        break;
                    }
                }
            }
            if (s.contains(toFind) && isValid(s, toFind)) {
                System.out.println("Yes");
                s = s.replaceAll("\\?", "z");
                System.out.println(s);
            } else {
                boolean found = false;
                for (int pos: qMarkPos.keySet()) {
                    String tmp = s.substring(0, qMarkPos.get(pos)) + toFind.charAt(pos) + s.substring(qMarkPos.get(pos)+1);
                    if (isValid(tmp, toFind)) {
                        System.out.println("Yes");
                        tmp = tmp.replaceAll("\\?", "z");
                        System.out.println(tmp);
                        found = true;
                    }
                }
                if (!found) {
                    for (int pos: qMarkPos.keySet()) {
                        s = s.substring(0, qMarkPos.get(pos)) + toFind.charAt(pos) + s.substring(qMarkPos.get(pos)+1);
                        if (isValid(s, toFind)) {
                            System.out.println("Yes");
                            s = s.replaceAll("\\?", "z");
                            System.out.println(s);
                            found = true;
                        }
                    }
                }

                if (!found) {
                    System.out.println("No");
                }
            }
        }
    }

    private static boolean isValid(String s, String toFind) {
        int firstIndex = s.indexOf(toFind);
        int lastIndex = s.lastIndexOf(toFind);
        return firstIndex != -1 && firstIndex == lastIndex;
    }

}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ProblemA {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int totalLines = Integer.parseInt(br.readLine());
        String toFind = "abacaba";

        for (int i = 0; i < totalLines; i++) {
            int sLength = Integer.parseInt(br.readLine());
            int pointer = 0;
            String s = br.readLine();

            for (int j = 0; j < sLength; j++) {
                if (pointer == toFind.length()) {
                    break;
                }
                if (s.charAt(j) == '?' && !s.contains(toFind)) {
                    s = s.substring(0, j) + toFind.charAt(pointer) + s.substring(j + 1);
                    pointer++;
                } else if (s.charAt(j) == '?' && s.contains(toFind)) {
                    s = s.substring(0, j) + "d" + s.substring(pointer + 1);
                    pointer++;
                } else if (s.charAt(j) == toFind.charAt(pointer)) {
                    pointer++;
                } else {
                    pointer = 0;
                }
            }

            if (s.contains("?")) {
                s = s.replaceAll("\\?", "d");
            }
            testForValid(toFind, s);
        }
    }

    private static void testForValid(String toFind, String s) {
        if (s.contains(toFind)) {
            int firstIndex = s.indexOf(toFind);
            int lastIndex = s.lastIndexOf(toFind);
            if (firstIndex != lastIndex && firstIndex != -1) {
                System.out.println("No");
            } else {
                System.out.println("Yes");
                System.out.println(s);
            }
        } else {
            System.out.println("No");
        }
    }
}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class ProblemA {

    /*
    6
    7
    abacaba
    7
    ???????
    11
    aba?abacaba
    11
    abacaba?aba
    15
    asdf???f???qwer
    11
    abacabacaba

    * */
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int totalLines = Integer.parseInt(br.readLine());
        String toFind = "abacaba";

        for (int i = 0; i < totalLines; i++) {
            int sLength = Integer.parseInt(br.readLine());
            String s = br.readLine();
            for (int k = 0; k <= sLength-toFind.length(); k++) {
                List<Integer> qMarkPos = new ArrayList<>();
                int found = 0;
                for (int j = 0; j < toFind.length(); j++) {
                    if (s.charAt(j) == toFind.charAt(j)) {
                        found++;
                    } else if (s.charAt(j) == '?') {
                        found++;
                        qMarkPos.add(j);
                    } else {
                        break;
                    }
                }
                if (found == toFind.length() && !s.contains(toFind)) {
                    for (int pos : qMarkPos) {
                        s = s.substring(0, pos) + toFind.charAt(pos) + s.substring(pos+1);
                    }
                    break;
                }
            }

            s = s.replaceAll("\\?", "z");
            int firstIndex = s.indexOf(toFind);
            int lastIndex = s.lastIndexOf(toFind);
            if (firstIndex == -1 || firstIndex != lastIndex) {
                System.out.println("No");
            } else {
                System.out.println("Yes");
                System.out.println(s);
            }
        }
    }

}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ProblemA {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int totalLines = Integer.parseInt(br.readLine());
        String toFind = "abacaba";

        for (int i = 0; i < totalLines; i++) {
            int sLength = Integer.parseInt(br.readLine());
            int pointer = 0;
            String s = br.readLine();

            for (int j = 0; j < sLength; j++) {
                if (pointer == toFind.length()) {
                    break;
                }
                if (s.charAt(j) == '?' && !s.contains(toFind)) {
                    s = s.substring(0, j) + toFind.charAt(pointer) + s.substring(pointer + 1);
                    pointer++;
                } else if (s.charAt(j) == '?' && s.contains(toFind)) {
                    s = s.substring(0, j) + "d" + s.substring(pointer + 1);
                    pointer++;
                } else if (s.charAt(j) == toFind.charAt(pointer)) {
                    pointer++;
                } else {
                    pointer = 0;
                }
            }

            if (s.contains("?")) {
                s = s.replaceAll("\\?", "d");
            }
            testForValid(toFind, s);
        }
    }

    private static void testForValid(String toFind, String s) {
        if (s.contains(toFind)) {
            int firstIndex = s.indexOf(toFind);
            int lastIndex = s.lastIndexOf(toFind);
            if (firstIndex != lastIndex && firstIndex != -1) {
                System.out.println("No");
            } else {
                System.out.println("Yes");
                System.out.println(s);
            }
        } else {
            System.out.println("No");
        }
    }
}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ProblemA {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int totalLines = Integer.parseInt(br.readLine());
        String toFind = "abacaba";

        for (int i = 0; i < totalLines; i++) {
            int sLength = Integer.parseInt(br.readLine());
            int pointer = 0;
            String s = br.readLine();

            for (int j = 0; j < sLength; j++) {
                if (pointer == toFind.length()) {
                    break;
                }
                if (s.charAt(j) == '?' && !s.contains(toFind)) {
                    s = s.substring(0, j) + toFind.charAt(pointer) + s.substring(j + 1);
                    pointer++;
                } else if (s.charAt(j) == '?' && s.contains(toFind)) {
                    s = s.substring(0, j) + "d" + s.substring(pointer + 1);
                    pointer++;
                } else if (s.charAt(j) == toFind.charAt(pointer)) {
                    pointer++;
                } else {
                    pointer = 0;
                }
            }

            if (s.contains("?")) {
                s = s.replaceAll("\\?", "d");
            }
            testForValid(toFind, s);
        }
    }

    private static void testForValid(String toFind, String s) {
        if (s.contains(toFind)) {
            int firstIndex = s.indexOf(toFind);
            int lastIndex = s.lastIndexOf(toFind);
            if (firstIndex != lastIndex && firstIndex != -1) {
                System.out.println("No");
            } else {
                System.out.println("Yes");
                System.out.println(s.toLowerCase());
            }
        } else {
            System.out.println("No");
        }
    }
}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ProblemA {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int totalLines = Integer.parseInt(br.readLine());

        while (totalLines-- > 0) {
            int sLength = Integer.parseInt(br.readLine());
            String s = br.readLine();
            int occurrences = 0;
            for (int k = 0; k < s.length() - 6; ++k) {
                if (s.substring(k, k + 7).equalsIgnoreCase("abacaba")) {
                    occurrences++;
                }
            }

            if (occurrences > 1) {
                System.out.println("No");
            }
            else if (occurrences == 1) {
                System.out.println("Yes" + "\n" + s.replaceAll("\\?", "z"));
            }
            else if (occurrences == 0) {
                String q = "";
                boolean exists = false;
                for (int j = sLength - 7; j >= 0; --j) {
                    String p = s.substring(j, j + 7);
                    if (containsGoal(p)) {
                        q = s.substring(0, j).replaceAll("\\?", "z") + "abacaba" + s.substring(j + 7).replaceAll("\\?", "z");
                        for (int l = 0; l <= sLength - 6; ++l) {
                            if (l == q.length() - 6) {
                                exists = true;
                                break;
                            } else if (l < q.length()-6){
                                String x = q.substring(l, l + 7);
                                if (j != l && containsGoal(x)) {
                                    break;
                                }
                            }
                        }

                        if (exists) {
                            break;
                        }
                    }
                }

                if (exists) {
                    System.out.println("Yes");
                    System.out.println(q.replaceAll("\\?", "z"));
                } else {
                    System.out.println("No");
                }
            }
        }
    }

    private static boolean containsGoal(String res) {
        boolean ress = true;
        char[] t = {'a', 'b', 'a', 'c', 'a', 'b', 'a'};
        for (int i = 0; i < 7; ++i) {
            if (res.charAt(i) != '?' && t[i] != res.charAt(i)) {
                ress = false;
                break;
            }
        }
        return ress;
    }

}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class ProblemA {

    /*
    6
    7
    abacaba
    7
    ???????
    11
    aba?abacaba
    11
    abacaba?aba
    15
    asdf???f???qwer
    11
    abacabacaba

    * */
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int totalLines = Integer.parseInt(br.readLine());
        String toFind = "abacaba";

        for (int i = 0; i < totalLines; i++) {
            int sLength = Integer.parseInt(br.readLine());
            String s = br.readLine();
            if (containsGoal(s, toFind)) {
                System.out.println("Yes");
                s = s.replaceAll("\\?", "z");
                System.out.println(s);
            } else {
                StringBuilder temp = new StringBuilder();
                for (int j = 0; j < sLength; j++) {
                    if (s.charAt(j) == '?') {
                        s = s.substring(0, j) + toFind.charAt(temp.length()) + s.substring(j + 1);
                        if (containsGoal(s, toFind)) {
                            s = s.replaceAll("\\?", "z");
                            break;
                        }
                        temp.append(s.charAt(j));
                    } else {
                        String other = temp.toString() + s.charAt(j);
                        if (toFind.startsWith(other)) {
                            temp.append(s.charAt(j));
                        } else {
                            temp.setLength(0);
                        }
                    }
                }

                if (containsGoal(s, toFind)) {
                    System.out.println("Yes");
                    System.out.println(s);
                } else {
                    System.out.println("No");
                }
            }
        }
    }

    private static boolean containsGoal(String s, String goal) {
        int firstIndex = s.indexOf(goal);
        return firstIndex == s.lastIndexOf(goal) && firstIndex != -1;
    }

}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ProblemA {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int totalLines = Integer.parseInt(br.readLine());
        String toFind = "abacaba";

        while(totalLines-- > 0) {
            int sLength = Integer.parseInt(br.readLine());
            String s = br.readLine();
            if (containsGoal(s, toFind)) {
                System.out.println("Yes");
                s = s.replaceAll("\\?", "z");
                System.out.println(s);
            } else {
                StringBuilder temp = new StringBuilder();
                for (int j = 0; j < sLength; j++) {
                    if (s.charAt(j) == '?') {
                        s = s.substring(0, j) + toFind.charAt(temp.length()) + s.substring(j + 1);
                        if (containsGoal(s, toFind)) {
                            s = s.replaceAll("\\?", "z");
                            break;
                        }
                        temp.append(s.charAt(j));
                    } else {
                        String other = temp.toString() + s.charAt(j);
                        if (toFind.startsWith(other)) {
                            temp.append(s.charAt(j));
                        } else {
                            temp = new StringBuilder();
                        }
                    }
                }

                if (containsGoal(s, toFind)) {
                    System.out.println("Yes");
                    System.out.println(s);
                } else {
                    System.out.println("No");
                }
            }
        }
    }

    private static boolean containsGoal(String s, String goal) {
        int firstIndex = s.indexOf(goal);
        return firstIndex == s.lastIndexOf(goal) && firstIndex != -1;
    }

}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ProblemA {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int totalLines = Integer.parseInt(br.readLine());
        String toFind = "abacaba";

        for (int i = 0; i < totalLines; i++) {
            int sLength = Integer.parseInt(br.readLine());
            int pointer = 0;
            String s = br.readLine();

            for (int j = 0; j < sLength; j++) {
                if (pointer == toFind.length() && s.charAt(j) == '?') {
                    s = s.substring(0, j) + "d" + s.substring(j + 1);
                } else if (pointer < toFind.length()) {
                    if (s.charAt(j) == '?' && !s.contains(toFind)) {
                        s = s.substring(0, j) + toFind.charAt(pointer) + s.substring(j + 1);
                        pointer++;
                    } else if (s.charAt(j) == '?' && s.contains(toFind)) {
                        s = s.substring(0, j) + "d" + s.substring(j + 1);
                        pointer++;
                    } else if (s.charAt(j) == toFind.charAt(pointer)) {
                        pointer++;
                    } else {
                        pointer = 0;
                    }
                }
            }

            testForValid(toFind, s);
        }
    }

    private static void testForValid(String toFind, String s) {
        if (s.contains(toFind)) {
            int firstIndex = s.indexOf(toFind);
            int lastIndex = s.lastIndexOf(toFind);
            if (firstIndex != lastIndex && firstIndex != -1) {
                System.out.println("No");
            } else {
                System.out.println("Yes");
                System.out.println(s.toLowerCase());
            }
        } else {
            System.out.println("No");
        }
    }
}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ProblemA {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int totalLines = Integer.parseInt(br.readLine());
        String toFind = "abacaba";

        for (int i = 0; i < totalLines; i++) {
            int sLength = Integer.parseInt(br.readLine());
            int pointer = 0;
            String s = br.readLine();

            for (int j = 0; j < sLength; j++) {
                if (pointer == toFind.length()) {
                    break;
                }
                if (s.charAt(j) == '?' && !s.contains(toFind)) {
                    s = s.substring(0, j) + toFind.charAt(pointer) + s.substring(pointer + 1);
                    pointer++;
                } else if (s.charAt(j) == '?' && s.contains(toFind)) {
                    s = s.substring(0, j) + "d" + s.substring(pointer + 1);
                    pointer++;
                } else if (s.charAt(j) == toFind.charAt(pointer)) {
                    pointer++;
                } else {
                    pointer = 0;
                }
            }

            testForValid(toFind, s);
        }
    }

    private static void testForValid(String toFind, String s) {
        if (s.contains(toFind)) {
            int firstIndex = s.indexOf(toFind);
            int lastIndex = s.lastIndexOf(toFind);
            if (firstIndex != lastIndex && firstIndex != -1) {
                System.out.println("No");
            } else {
                System.out.println("Yes");
                System.out.println(s);
            }
        } else {
            System.out.println("No");
        }
    }
}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ProblemA {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int totalLines = Integer.parseInt(br.readLine());
        String toFind = "abacaba";

        for (int i = 0; i < totalLines; i++) {
            int sLength = Integer.parseInt(br.readLine());
            int pointer = 0;
            String s = br.readLine();
            if (s.contains(toFind)) {
                int firstIndex = s.indexOf(toFind);
                if (firstIndex != s.lastIndexOf(toFind) && firstIndex != -1) {
                    System.out.println("No");
                } else {
                    System.out.println("Yes");
                }
            } else {
                for (int j = 0; j < sLength; j++) {
                    if (s.charAt(j) == '?') {
                        s = s.substring(0, j) + toFind.charAt(pointer) + s.substring(pointer+1);
                        pointer++;
                    } else if (s.charAt(j) == toFind.charAt(pointer)) {
                        pointer++;
                    } else {
                        pointer = 0;
                    }
                }

                if (s.contains(toFind)) {
                    int firstIndex = s.indexOf(toFind);
                    if (firstIndex != s.lastIndexOf(toFind) && firstIndex != -1) {
                        System.out.println("No");
                    } else {
                        System.out.println("Yes");
                    }
                } else {
                    System.out.println("No");
                }
            }
        }
    }
}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class CF1379A {
    public static void main(String[] args) {
        FastReader input = new FastReader();
        PrintWriter pw = new PrintWriter(System.out);

        int t = input.nextInt();
        while (t > 0){
            int n = input.nextInt();
            String s = input.nextLine();

            char[] arr = new char[s.length()+1];

            for(int i = 0;i < s.length();i++){
                arr[i+1] = s.charAt(i);
            }

            int count = 0;
            for(int i = 1;i <= arr.length-7;i++){
                String curr = new String();
                for(int j = i;j <= i+6;j++){
                    curr += arr[j];
                }
                if(curr.equals("abacaba")){
                    count++;
                }
            }
            if(count > 1){
                pw.println("NO");
            }

            else{
                if(count == 1){
                    pw.println("YES");
                    pw.println(s);
                }
                else{
                    boolean possible = false;
                    for(int i = 1;i <= arr.length-7;i++){
                        boolean con = true;
                        for(int j = i;j <= i+6;j++){
                            int pos = j - i + 1;
                            if(pos == 1){
                                if(arr[j] == '?'){
                                }
                                else{
                                    if(arr[j] == 'a'){
                                    }
                                    else{
                                        con = false;
                                        break;
                                    }
                                }
                            }
                            if(pos == 2){
                                if(arr[j] == '?'){

                                }
                                else{
                                    if(arr[j] == 'b'){

                                    }
                                    else{
                                        con = false;
                                        break;
                                    }
                                }
                            }
                            if(pos == 3){
                                if(arr[j] == '?'){

                                }
                                else{
                                    if(arr[j] == 'a'){

                                    }
                                    else{
                                        con = false;
                                        break;
                                    }
                                }
                            }
                            if(pos == 4){
                                if(arr[j] == '?'){

                                }
                                else{
                                    if(arr[j] == 'c'){

                                    }
                                    else{
                                        con = false;
                                        break;
                                    }
                                }
                            }
                            if(pos == 5){
                                if(arr[j] == '?'){

                                }
                                else{
                                    if(arr[j] == 'a'){

                                    }
                                    else{
                                        con = false;
                                        break;
                                    }
                                }
                            }
                            if(pos == 6){
                                if(arr[j] == '?'){

                                }
                                else{
                                    if(arr[j] == 'b'){

                                    }
                                    else{
                                        con = false;
                                        break;
                                    }
                                }
                            }
                            if(pos == 7){
                                if(arr[j] == '?'){

                                }
                                else{
                                    if(arr[j] == 'a'){

                                    }
                                    else{
                                        con = false;
                                        break;
                                    }
                                }
                            }
                        }
                        if(con){
                            arr[i] = 'a';
                            arr[i+1] = 'b';
                            arr[i+2] = 'a';
                            arr[i+3] = 'c';
                            arr[i+4] = 'a';
                            arr[i+5] = 'b';
                            arr[i+6] = 'a';
                            possible = true;
                            break;
                        }
                    }
                    if(possible){
                        pw.println("YES");
                        for(int i = 1;i < arr.length;i++){
                            pw.print(arr[i]);
                        }
                        pw.println();
                    }
                    else{
                        pw.println("NO");
                    }
                }
            }

            t--;
        }

        // ****If sorting is required, use ArrayList
        pw.flush();
        pw.close();
    }
    static class FastReader
    {
        BufferedReader br;
        StringTokenizer st;

        public FastReader()
        {
            br = new BufferedReader(new
                    InputStreamReader(System.in));
        }

        String next()
        {
            while (st == null || !st.hasMoreElements())
            {
                try
                {
                    st = new StringTokenizer(br.readLine());
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt()
        {
            return Integer.parseInt(next());
        }

        long nextLong()
        {
            return Long.parseLong(next());
        }

        double nextDouble()
        {
            return Double.parseDouble(next());
        }

        String nextLine()
        {
            String str = "";
            try
            {
                str = br.readLine();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            return str;
        }
    }
}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class CF1379A {
    public static void main(String[] args) {
        FastReader input = new FastReader();
        PrintWriter pw = new PrintWriter(System.out);

        int t = input.nextInt();
        while (t > 0){
            int n = input.nextInt();
            String s = input.nextLine();

            char[] arr = new char[s.length()+1];

            for(int i = 0;i < s.length();i++){
                arr[i+1] = s.charAt(i);
            }

            int count = 0;
            for(int i = 1;i <= arr.length-7;i++){
                String curr = new String();
                for(int j = i;j <= i+6;j++){
                    curr += arr[j];
                }
                if(curr.equals("abacaba")){
                    count++;
                }
            }
            if(count > 1){
                pw.println("NO");
            }

            else{
                if(count == 1){
                    pw.println("YES");
                    for(int i = 1;i < arr.length;i++){
                        if(arr[i] == '?')
                            pw.print('z');
                        else
                            pw.print(arr[i]);
                    }
                    pw.println();
                }
                else{
                    boolean possible = false;
                    for(int i = 1;i <= arr.length-7;i++){
                        boolean con = true;
                        for(int j = i;j <= i+6;j++){
                            int pos = j - i + 1;
                            if(pos == 1){
                                if(arr[j] == '?'){
                                }
                                else{
                                    if(arr[j] == 'a'){
                                    }
                                    else{
                                        con = false;
                                        break;
                                    }
                                }
                            }
                            if(pos == 2){
                                if(arr[j] == '?'){

                                }
                                else{
                                    if(arr[j] == 'b'){

                                    }
                                    else{
                                        con = false;
                                        break;
                                    }
                                }
                            }
                            if(pos == 3){
                                if(arr[j] == '?'){

                                }
                                else{
                                    if(arr[j] == 'a'){

                                    }
                                    else{
                                        con = false;
                                        break;
                                    }
                                }
                            }
                            if(pos == 4){
                                if(arr[j] == '?'){

                                }
                                else{
                                    if(arr[j] == 'c'){

                                    }
                                    else{
                                        con = false;
                                        break;
                                    }
                                }
                            }
                            if(pos == 5){
                                if(arr[j] == '?'){

                                }
                                else{
                                    if(arr[j] == 'a'){

                                    }
                                    else{
                                        con = false;
                                        break;
                                    }
                                }
                            }
                            if(pos == 6){
                                if(arr[j] == '?'){

                                }
                                else{
                                    if(arr[j] == 'b'){

                                    }
                                    else{
                                        con = false;
                                        break;
                                    }
                                }
                            }
                            if(pos == 7){
                                if(arr[j] == '?'){

                                }
                                else{
                                    if(arr[j] == 'a'){

                                    }
                                    else{
                                        con = false;
                                        break;
                                    }
                                }
                            }
                        }
                        if(con){

                            boolean check = false;

                            if(i+10 < arr.length){
                                if(arr[i+7] == 'c' && arr[i+8] == 'a' && arr[i+9] == 'b' && arr[i+10] == 'a'){
                                    check = true;
                                }
                            }

                            if(check){

                            }
                            else {
                                arr[i] = 'a';
                                arr[i+1] = 'b';
                                arr[i+2] = 'a';
                                arr[i+3] = 'c';

                                arr[i+4] = 'a';
                                arr[i+5] = 'b';
                                arr[i+6] = 'a';
                                possible = true;
                                break;
                            }
                        }
                    }
                    if(possible){
                        pw.println("YES");
                        for(int i = 1;i < arr.length;i++){
                            if(arr[i] == '?')
                                pw.print('z');
                            else
                            pw.print(arr[i]);
                        }
                        pw.println();
                    }
                    else{
                        pw.println("NO");
                    }
                }
            }

            t--;
        }

        // ****If sorting is required, use ArrayList
        pw.flush();
        pw.close();
    }
    static class FastReader
    {
        BufferedReader br;
        StringTokenizer st;

        public FastReader()
        {
            br = new BufferedReader(new
                    InputStreamReader(System.in));
        }

        String next()
        {
            while (st == null || !st.hasMoreElements())
            {
                try
                {
                    st = new StringTokenizer(br.readLine());
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt()
        {
            return Integer.parseInt(next());
        }

        long nextLong()
        {
            return Long.parseLong(next());
        }

        double nextDouble()
        {
            return Double.parseDouble(next());
        }

        String nextLine()
        {
            String str = "";
            try
            {
                str = br.readLine();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            return str;
        }
    }
}