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){
                            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');
                            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;
                            char[] arr2 = new char[arr.length];
                            for(int p = 1;p < arr.length;p++)
                                arr2[p] = arr[p];

                            arr2[i] = 'a';
                            arr2[i+1] = 'b';
                            arr2[i+2] = 'a';
                            arr2[i+3] = 'c';

                            arr2[i+4] = 'a';
                            arr2[i+5] = 'b';
                            arr2[i+6] = 'a';

                            for(int p = i+1;p <= i+7;p++){
                                String r = new String();
                                for(int q = p; q <= p+6 && q < arr2.length;q++){
                                    r += arr2[q];
                                }
                                if(r.equals("abacaba")){
                                    check = true;
                                    break;
                                }
                            }

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


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

            boolean possible = false;

            for(int i = 0;i < n-6;i++){
                char[] arr = s.toCharArray();
                if(arr[i] == '?'){
                    arr[i] = 'a';
                }
                if(arr[i]=='?'){
                    arr[i]='a';
                }
                else if(arr[i]!='a'){
                    continue;
                }
                if(arr[i+1]=='?'){
                    arr[i+1]='b';
                }
                else if(arr[i+1]!='b'){
                    continue;
                }
                if(arr[i+2]=='?'){
                    arr[i+2]='a';
                }
                else if(arr[i+2]!='a'){
                    continue;
                }
                if(arr[i+3]=='?'){
                    arr[i+3]='c';
                }
                else if(arr[i+3]!='c'){
                    continue;
                }
                if(arr[i+4]=='?'){
                    arr[i+4]='a';
                }
                else if(arr[i+4]!='a'){
                    continue;
                }
                if(arr[i+5]=='?'){
                    arr[i+5]='b';
                }
                else if(arr[i+5]!='b'){
                    continue;
                }
                if(arr[i+6]=='?'){
                    arr[i+6]='a';
                }
                else if(arr[i+6]!='a'){
                    continue;
                }
                for(int j = 0;j < n;j++){
                    if(arr[j] == '?')
                        arr[j] = 'z';
                }
                int count = 0;
                for(int j = 0;j < n-6;j++){
                    if(arr[j] == 'a' && arr[j+1] == 'b' && arr[j+2] == 'a' && arr[j+3] == 'c' && arr[j+4] == 'a' && arr[j+5] == 'b' && arr[j+6] == 'a'){
                        count++;
                    }
                }
                if(count == 1){
                    possible = true;
                    pw.println("YES");
                    for(char c : arr){
                        pw.print(c);
                    }
                    pw.println();
                }
            }

            if(possible == false){
                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();

            boolean possible = false;

            for(int i = 0;i < n-6;i++){
                char[] arr = s.toCharArray();
                if(arr[i] == '?'){
                    arr[i] = 'a';
                }
                if(arr[i]=='?'){
                    arr[i]='a';
                }
                else if(arr[i]!='a'){
                    continue;
                }
                if(arr[i+1]=='?'){
                    arr[i+1]='b';
                }
                else if(arr[i+1]!='b'){
                    continue;
                }
                if(arr[i+2]=='?'){
                    arr[i+2]='a';
                }
                else if(arr[i+2]!='a'){
                    continue;
                }
                if(arr[i+3]=='?'){
                    arr[i+3]='c';
                }
                else if(arr[i+3]!='c'){
                    continue;
                }
                if(arr[i+4]=='?'){
                    arr[i+4]='a';
                }
                else if(arr[i+4]!='a'){
                    continue;
                }
                if(arr[i+5]=='?'){
                    arr[i+5]='b';
                }
                else if(arr[i+5]!='b'){
                    continue;
                }
                if(arr[i+6]=='?'){
                    arr[i+6]='a';
                }
                else if(arr[i+6]!='a'){
                    continue;
                }
                for(int j = 0;j < n;j++){
                    if(arr[j] == '?')
                        arr[j] = 'z';
                }
                int count = 0;
                for(int j = 0;j < n-6;j++){
                    if(arr[j] == 'a' && arr[j+1] == 'b' && arr[j+2] == 'a' && arr[j+3] == 'c' && arr[j+4] == 'a' && arr[j+5] == 'b' && arr[j+6] == 'a'){
                        count++;
                    }
                }
                if(count == 1){
                    possible = true;
                    pw.println("YES");
                    for(char c : arr){
                        pw.print(c);
                    }
                    pw.println();
                    break;
                }
            }

            if(possible == false){
                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;
                            char[] arr2 = new char[arr.length];
                            for(int p = 1;p < arr.length;p++)
                                arr2[p] = arr[p];

                            arr2[i] = 'a';
                            arr2[i+1] = 'b';
                            arr2[i+2] = 'a';
                            arr2[i+3] = 'c';

                            arr2[i+4] = 'a';
                            arr2[i+5] = 'b';
                            arr2[i+6] = 'a';

                            for(int p = i+1;p <= i+5;p++){
                                String r = new String();
                                for(int q = p; q <= p+6 && q < arr2.length;q++){
                                    r += arr2[q];
                                }
                                if(r.equals("abacaba")){
                                    check = true;
                                    break;
                                }
                            }

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


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


import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.InputMismatchException;

/**
 * @author Mubtasim Shahriar
 */

public class AcaciusString {

	public static void main(String[] args) {

		InputStream inputStream = System.in;
		OutputStream outputStream = System.out;
		InputReader sc = new InputReader(inputStream);
		PrintWriter out = new PrintWriter(outputStream);
		Solver solver = new Solver();
		int t = sc.nextInt();
//		int t = 1;
		while(t--!=0) {
			solver.solve(sc, out);
		}
		out.close();

	}

	static class Solver {
		private String aa;

		public void solve(InputReader sc, PrintWriter out) {
			int n = sc.nextInt();
			String s = sc.next();
			aa = "abacaba";
			int ocr = getOcr(s);
			if(ocr>1) {
				out.println("NO");
				return;
			}
			if(ocr==1) {
				StringBuilder ans = new StringBuilder(s);
				for(int i = 0; i < n; i++) if(ans.charAt(i)=='?') ans.setCharAt(i, 'z');
				out.println("YES");
				out.println(ans);
			} else {
				int ansat = -1;
				StringBuilder tmp = new StringBuilder();
				for(int i = 0; i + 6 < n; i++) {
					tmp = new StringBuilder(s);
					int idx = 0;
					int at = i;
					while(idx<7){
						if(tmp.charAt(at)=='?') tmp.setCharAt(at, aa.charAt(idx));
						idx++;
						at++;
					}
					if(tmp.substring(i,i+7).equals(aa)) {
						ocr = getOcr(tmp.toString());
						if(ocr==1) {
							ansat = i;
							break;
						}
					}
				}
				if(ansat==-1) {
					out.println("NO");
				} else {
					for(int i = 0; i < n; i++) {
						if(tmp.charAt(i)=='?') tmp.setCharAt(i, 'z');
					}
					out.println("YES");
					out.println(tmp);
				}
			}
		}

		private int getOcr(String s) {
			int ocr = 0;
			int n = s.length();
			for(int i = 0; i + 6 < n; i++) {
				if(s.substring(i,i+7).equals(aa)) ocr++;
			}
			return ocr;
		}
	}

	static void sort(int[] arr) {
		ArrayList<Integer> al = new ArrayList();
		for(int i : arr) al.add(i);
		Collections.sort(al);
		int idx = 0;
		for(int i : al) arr[idx++] = i;
	}
	static void sort(long[] arr) {
		ArrayList<Long> al = new ArrayList();
		for(long i : arr) al.add(i);
		Collections.sort(al);
		int idx = 0;
		for(long i : al) arr[idx++] = i;
	}
	static void sortDec(int[] arr) {
		ArrayList<Integer> al = new ArrayList();
		for(int i : arr) al.add(i);
		Collections.sort(al,Collections.reverseOrder());
		int[] ret = new int[arr.length];
		int idx = 0;
		for(int i : al) arr[idx++] = i;
	}
	static void sortDec(long[] arr) {
		ArrayList<Long> al = new ArrayList();
		for(long i : arr) al.add(i);
		Collections.sort(al,Collections.reverseOrder());
		int idx = 0;
		for(long i : al) arr[idx++] = i;
	}

	static class InputReader {
		private boolean finished = false;

		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 int peek() {
			if (numChars == -1) {
				return -1;
			}
			if (curChar >= numChars) {
				curChar = 0;
				try {
					numChars = stream.read(buf);
				} catch (IOException e) {
					return -1;
				}
				if (numChars <= 0) {
					return -1;
				}
			}
			return buf[curChar];
		}

		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 String nextString() {
			int c = read();
			while (isSpaceChar(c)) {
				c = read();
			}
			StringBuilder res = new StringBuilder();
			do {
				if (Character.isValidCodePoint(c)) {
					res.appendCodePoint(c);
				}
				c = read();
			} while (!isSpaceChar(c));
			return res.toString();
		}

		public boolean isSpaceChar(int c) {
			if (filter != null) {
				return filter.isSpaceChar(c);
			}
			return isWhitespace(c);
		}

		public static boolean isWhitespace(int c) {
			return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
		}

		private String readLine0() {
			StringBuilder buf = new StringBuilder();
			int c = read();
			while (c != '\n' && c != -1) {
				if (c != '\r') {
					buf.appendCodePoint(c);
				}
				c = read();
			}
			return buf.toString();
		}

		public String readLine() {
			String s = readLine0();
			while (s.trim().length() == 0) {
				s = readLine0();
			}
			return s;
		}

		public String readLine(boolean ignoreEmptyLines) {
			if (ignoreEmptyLines) {
				return readLine();
			} else {
				return readLine0();
			}
		}

		public BigInteger readBigInteger() {
			try {
				return new BigInteger(nextString());
			} catch (NumberFormatException e) {
				throw new InputMismatchException();
			}
		}

		public char nextCharacter() {
			int c = read();
			while (isSpaceChar(c)) {
				c = read();
			}
			return (char) c;
		}

		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 boolean isExhausted() {
			int value;
			while (isSpaceChar(value = peek()) && value != -1) {
				read();
			}
			return value == -1;
		}

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

		public SpaceCharFilter getFilter() {
			return filter;
		}

		public void setFilter(SpaceCharFilter filter) {
			this.filter = filter;
		}

		public interface SpaceCharFilter {
			public boolean isSpaceChar(int ch);
		}
		public int[] nextIntArray(int n){
			int[] array=new int[n];
			for(int i=0;i<n;++i)array[i]=nextInt();
			return array;
		}
		public int[] nextSortedIntArray(int n){
			int array[]=nextIntArray(n);
			Arrays.sort(array);
			return array;
		}
		public int[] nextSumIntArray(int n){
			int[] array=new int[n];
			array[0]=nextInt();
			for(int i=1;i<n;++i)array[i]=array[i-1]+nextInt();
			return array;
		}
		public long[] nextLongArray(int n){
			long[] array=new long[n];
			for(int i=0;i<n;++i)array[i]=nextLong();
			return array;
		}
		public long[] nextSumLongArray(int n){
			long[] array=new long[n];
			array[0]=nextInt();
			for(int i=1;i<n;++i)array[i]=array[i-1]+nextInt();
			return array;
		}
		public long[] nextSortedLongArray(int n){
			long array[]=nextLongArray(n);
			Arrays.sort(array);
			return array;
		}
	}

}


import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.InputMismatchException;

/**
 * @author Mubtasim Shahriar
 */

public class Cr657A {

	public static void main(String[] args) {

		InputStream inputStream = System.in;
		OutputStream outputStream = System.out;
		InputReader sc = new InputReader(inputStream);
		PrintWriter out = new PrintWriter(outputStream);
		Solver solver = new Solver();
		int t = sc.nextInt();
//		int t = 1;
		while(t--!=0) {
			solver.solve(sc, out);
		}
		out.close();

	}

	static class Solver {
		public void solve(InputReader sc, PrintWriter out) {
			int n = sc.nextInt();
			String s = sc.next();
			String aa = "abacaba";
			int f = -1;
			int ocr = 0;
			for(int i = 0; i+6 < n; i++) {
				if(s.substring(i,i+7).equals(aa)) {
					f = -1;
					ocr++;
				}
			}
			if(ocr>=2) {
				out.println("NO");
				return;
			}
			if(ocr==1) {
				StringBuilder ans = new StringBuilder(s);
				for(int i = 0; i < n; i++) {
					if(s.charAt(i)=='?') ans.setCharAt(i, 'z');
				}
				out.println("YES");
				out.println(ans);
				return;
			}
			for(int i = 0; i+6 < n; i++) {
				StringBuilder ans = new StringBuilder(s);
				int idx = 0;
				for(int j = i; idx < 7; j++) {
					if(ans.charAt(j)=='?') ans.setCharAt(j, aa.charAt(idx));
					idx++;
				}
				if(ans.substring(i,i+7).equals(aa)) {
					for(int j = 0; j < i; j++) {
						if(ans.charAt(j)=='?') ans.setCharAt(j, 'z');
					}
					for(int j = i+7; j < n; j++) {
						if(ans.charAt(j)=='?') ans.setCharAt(j, 'z');
					}
					out.println("YES");
					out.println(ans);
					return;
				}
			}
			out.println("NO");
//			StringBuilder sb = new StringBuilder();
//			String aa = "abacaba";
//			int fidx = -1;
//			boolean found = false;
//			int ocr = 0;
//			int norocr = -1;
//			for(int i = 0; i < n; i++) {
//				if(i+6>=n) break;
//				if(s.substring(i,i+7).equals(aa)) {
//					ocr++;
//					norocr = i;
//				}
//			}
//			if(ocr>=2) {
//				out.println("NO");
//				return;
//			}
//			if(norocr!=-1) {
//				sb = new StringBuilder(s);
//				for(int i = 0; i < norocr; i++) if(sb.charAt(i)=='?') sb.setCharAt(i, 'z');
//				for(int i = norocr + 7; i < n; i++) if(sb.charAt(i)=='?') sb.setCharAt(i, 'z');
//				out.println("YES");
//				out.println(sb);
//				return;
//			}
//			for(int i = 0; i < n; i++) {
//				if(i+6>=n) break;
//				sb = new StringBuilder(s);
//				int idx = 0;
//				for(int j = i; j < i+7; j++) {
//					if(sb.charAt(j)=='?') sb.setCharAt(j, aa.charAt(idx));
//					idx++;
//				}
//				if(sb.substring(i,i+7).equals(aa)) {
//					found = true;
//					fidx = i;
//					break;
//				}
//			}
//			if(found) {
//				for(int i = 0; i < fidx; i++) if(sb.charAt(i)=='?') sb.setCharAt(i, 'z');
//				for(int i = fidx + 7; i < n; i++) if(sb.charAt(i)=='?') sb.setCharAt(i, 'z');
//
//				out.println("YES");
//				out.println(sb);
//			} else {
//				out.println("NO");
//			}
		}
	}

	static void sort(int[] arr) {
		ArrayList<Integer> al = new ArrayList();
		for(int i : arr) al.add(i);
		Collections.sort(al);
		int idx = 0;
		for(int i : al) arr[idx++] = i;
	}
	static void sort(long[] arr) {
		ArrayList<Long> al = new ArrayList();
		for(long i : arr) al.add(i);
		Collections.sort(al);
		int idx = 0;
		for(long i : al) arr[idx++] = i;
	}
	static void sortDec(int[] arr) {
		ArrayList<Integer> al = new ArrayList();
		for(int i : arr) al.add(i);
		Collections.sort(al,Collections.reverseOrder());
		int[] ret = new int[arr.length];
		int idx = 0;
		for(int i : al) arr[idx++] = i;
	}
	static void sortDec(long[] arr) {
		ArrayList<Long> al = new ArrayList();
		for(long i : arr) al.add(i);
		Collections.sort(al,Collections.reverseOrder());
		int idx = 0;
		for(long i : al) arr[idx++] = i;
	}

	static class InputReader {
		private boolean finished = false;

		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 int peek() {
			if (numChars == -1) {
				return -1;
			}
			if (curChar >= numChars) {
				curChar = 0;
				try {
					numChars = stream.read(buf);
				} catch (IOException e) {
					return -1;
				}
				if (numChars <= 0) {
					return -1;
				}
			}
			return buf[curChar];
		}

		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 String nextString() {
			int c = read();
			while (isSpaceChar(c)) {
				c = read();
			}
			StringBuilder res = new StringBuilder();
			do {
				if (Character.isValidCodePoint(c)) {
					res.appendCodePoint(c);
				}
				c = read();
			} while (!isSpaceChar(c));
			return res.toString();
		}

		public boolean isSpaceChar(int c) {
			if (filter != null) {
				return filter.isSpaceChar(c);
			}
			return isWhitespace(c);
		}

		public static boolean isWhitespace(int c) {
			return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
		}

		private String readLine0() {
			StringBuilder buf = new StringBuilder();
			int c = read();
			while (c != '\n' && c != -1) {
				if (c != '\r') {
					buf.appendCodePoint(c);
				}
				c = read();
			}
			return buf.toString();
		}

		public String readLine() {
			String s = readLine0();
			while (s.trim().length() == 0) {
				s = readLine0();
			}
			return s;
		}

		public String readLine(boolean ignoreEmptyLines) {
			if (ignoreEmptyLines) {
				return readLine();
			} else {
				return readLine0();
			}
		}

		public BigInteger readBigInteger() {
			try {
				return new BigInteger(nextString());
			} catch (NumberFormatException e) {
				throw new InputMismatchException();
			}
		}

		public char nextCharacter() {
			int c = read();
			while (isSpaceChar(c)) {
				c = read();
			}
			return (char) c;
		}

		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 boolean isExhausted() {
			int value;
			while (isSpaceChar(value = peek()) && value != -1) {
				read();
			}
			return value == -1;
		}

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

		public SpaceCharFilter getFilter() {
			return filter;
		}

		public void setFilter(SpaceCharFilter filter) {
			this.filter = filter;
		}

		public interface SpaceCharFilter {
			public boolean isSpaceChar(int ch);
		}
		public int[] nextIntArray(int n){
			int[] array=new int[n];
			for(int i=0;i<n;++i)array[i]=nextInt();
			return array;
		}
		public int[] nextSortedIntArray(int n){
			int array[]=nextIntArray(n);
			Arrays.sort(array);
			return array;
		}
		public int[] nextSumIntArray(int n){
			int[] array=new int[n];
			array[0]=nextInt();
			for(int i=1;i<n;++i)array[i]=array[i-1]+nextInt();
			return array;
		}
		public long[] nextLongArray(int n){
			long[] array=new long[n];
			for(int i=0;i<n;++i)array[i]=nextLong();
			return array;
		}
		public long[] nextSumLongArray(int n){
			long[] array=new long[n];
			array[0]=nextInt();
			for(int i=1;i<n;++i)array[i]=array[i-1]+nextInt();
			return array;
		}
		public long[] nextSortedLongArray(int n){
			long array[]=nextLongArray(n);
			Arrays.sort(array);
			return array;
		}
	}

}


import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.InputMismatchException;

/**
 * @author Mubtasim Shahriar
 */

public class AcaciusString {

	public static void main(String[] args) {

		InputStream inputStream = System.in;
		OutputStream outputStream = System.out;
		InputReader sc = new InputReader(inputStream);
		PrintWriter out = new PrintWriter(outputStream);
		Solver solver = new Solver();
		int t = sc.nextInt();
//		int t = 1;
		while(t--!=0) {
			solver.solve(sc, out);
		}
		out.close();

	}

	static class Solver {
		public void solve(InputReader sc, PrintWriter out) {
			int n = sc.nextInt();
			String s = sc.next();
			int ocr = 0;
			String aa = "abacaba";
			for (int i = 0; i+6 < n; i++) {
				if(s.substring(i,i+7).equals(aa)) ocr++;
			}
			if(ocr>1) {
				out.println("NO");
				return;
			}
			if(ocr==1) {
				StringBuilder ans = new StringBuilder(s);
				for(int i = 0; i < n; i++) if(ans.charAt(i)=='?') ans.setCharAt(i, 'z');
				out.println("YES");
				out.println(ans);
			} else {
				int ansat = -1;
				StringBuilder tmp = new StringBuilder();
				for(int i = 0; i + 6 < n; i++) {
					tmp = new StringBuilder(s);
					int idx = 0;
					int at = i;
					while(idx<7){
						if(tmp.charAt(at)=='?') tmp.setCharAt(at, aa.charAt(idx));
						idx++;
						at++;
					}
					if(tmp.substring(i,i+7).equals(aa)) {
						ansat = i;
						break;
					}
				}
				if(ansat==-1) {
					out.println("NO");
				} else {
					for(int i = 0; i < n; i++) {
						if(tmp.charAt(i)=='?') tmp.setCharAt(i, 'z');
					}
					out.println("YES");
					out.println(tmp);
				}
			}
		}
	}

	static void sort(int[] arr) {
		ArrayList<Integer> al = new ArrayList();
		for(int i : arr) al.add(i);
		Collections.sort(al);
		int idx = 0;
		for(int i : al) arr[idx++] = i;
	}
	static void sort(long[] arr) {
		ArrayList<Long> al = new ArrayList();
		for(long i : arr) al.add(i);
		Collections.sort(al);
		int idx = 0;
		for(long i : al) arr[idx++] = i;
	}
	static void sortDec(int[] arr) {
		ArrayList<Integer> al = new ArrayList();
		for(int i : arr) al.add(i);
		Collections.sort(al,Collections.reverseOrder());
		int[] ret = new int[arr.length];
		int idx = 0;
		for(int i : al) arr[idx++] = i;
	}
	static void sortDec(long[] arr) {
		ArrayList<Long> al = new ArrayList();
		for(long i : arr) al.add(i);
		Collections.sort(al,Collections.reverseOrder());
		int idx = 0;
		for(long i : al) arr[idx++] = i;
	}

	static class InputReader {
		private boolean finished = false;

		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 int peek() {
			if (numChars == -1) {
				return -1;
			}
			if (curChar >= numChars) {
				curChar = 0;
				try {
					numChars = stream.read(buf);
				} catch (IOException e) {
					return -1;
				}
				if (numChars <= 0) {
					return -1;
				}
			}
			return buf[curChar];
		}

		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 String nextString() {
			int c = read();
			while (isSpaceChar(c)) {
				c = read();
			}
			StringBuilder res = new StringBuilder();
			do {
				if (Character.isValidCodePoint(c)) {
					res.appendCodePoint(c);
				}
				c = read();
			} while (!isSpaceChar(c));
			return res.toString();
		}

		public boolean isSpaceChar(int c) {
			if (filter != null) {
				return filter.isSpaceChar(c);
			}
			return isWhitespace(c);
		}

		public static boolean isWhitespace(int c) {
			return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
		}

		private String readLine0() {
			StringBuilder buf = new StringBuilder();
			int c = read();
			while (c != '\n' && c != -1) {
				if (c != '\r') {
					buf.appendCodePoint(c);
				}
				c = read();
			}
			return buf.toString();
		}

		public String readLine() {
			String s = readLine0();
			while (s.trim().length() == 0) {
				s = readLine0();
			}
			return s;
		}

		public String readLine(boolean ignoreEmptyLines) {
			if (ignoreEmptyLines) {
				return readLine();
			} else {
				return readLine0();
			}
		}

		public BigInteger readBigInteger() {
			try {
				return new BigInteger(nextString());
			} catch (NumberFormatException e) {
				throw new InputMismatchException();
			}
		}

		public char nextCharacter() {
			int c = read();
			while (isSpaceChar(c)) {
				c = read();
			}
			return (char) c;
		}

		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 boolean isExhausted() {
			int value;
			while (isSpaceChar(value = peek()) && value != -1) {
				read();
			}
			return value == -1;
		}

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

		public SpaceCharFilter getFilter() {
			return filter;
		}

		public void setFilter(SpaceCharFilter filter) {
			this.filter = filter;
		}

		public interface SpaceCharFilter {
			public boolean isSpaceChar(int ch);
		}
		public int[] nextIntArray(int n){
			int[] array=new int[n];
			for(int i=0;i<n;++i)array[i]=nextInt();
			return array;
		}
		public int[] nextSortedIntArray(int n){
			int array[]=nextIntArray(n);
			Arrays.sort(array);
			return array;
		}
		public int[] nextSumIntArray(int n){
			int[] array=new int[n];
			array[0]=nextInt();
			for(int i=1;i<n;++i)array[i]=array[i-1]+nextInt();
			return array;
		}
		public long[] nextLongArray(int n){
			long[] array=new long[n];
			for(int i=0;i<n;++i)array[i]=nextLong();
			return array;
		}
		public long[] nextSumLongArray(int n){
			long[] array=new long[n];
			array[0]=nextInt();
			for(int i=1;i<n;++i)array[i]=array[i-1]+nextInt();
			return array;
		}
		public long[] nextSortedLongArray(int n){
			long array[]=nextLongArray(n);
			Arrays.sort(array);
			return array;
		}
	}

}


import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.InputMismatchException;

/**
 * @author Mubtasim Shahriar
 */

public class Cr657A {

	public static void main(String[] args) {

		InputStream inputStream = System.in;
		OutputStream outputStream = System.out;
		InputReader sc = new InputReader(inputStream);
		PrintWriter out = new PrintWriter(outputStream);
		Solver solver = new Solver();
		int t = sc.nextInt();
//		int t = 1;
		while(t--!=0) {
			solver.solve(sc, out);
		}
		out.close();

	}

	static class Solver {
		public void solve(InputReader sc, PrintWriter out) {
			int n = sc.nextInt();
			String s = sc.next();
			StringBuilder sb = new StringBuilder();
			String aa = "abacaba";
			int fidx = -1;
			boolean found = false;
			int ocr = 0;
			int norocr = -1;
			for(int i = 0; i < n; i++) {
				if(i+6>=n) break;
				if(s.substring(i,i+7).equals(aa)) {
					ocr++;
					norocr = i;
				}
			}
			if(ocr>=2) {
				out.println("NO");
				return;
			}
			for(int i = 0; i < n; i++) {
				if(i+6>=n) break;
				sb = new StringBuilder(s);
				int idx = 0;
				for(int j = i; j < i+7; j++) {
					if(sb.charAt(j)=='?') sb.setCharAt(j, aa.charAt(idx));
					idx++;
				}
				if(sb.substring(i,i+7).equals(aa)) {
					found = true;
					fidx = i;
					break;
				}
			}
			if(norocr!=-1) {
				for(int i = 0; i < norocr; i++) if(sb.charAt(i)=='?') sb.setCharAt(i, 'z');
				for(int i = norocr + 7; i < n; i++) if(sb.charAt(i)=='?') sb.setCharAt(i, 'z');
				out.println("YES");
				out.println(sb);
				return;
			}
			if(found) {
				for(int i = 0; i < fidx; i++) if(sb.charAt(i)=='?') sb.setCharAt(i, 'z');
				for(int i = fidx + 7; i < n; i++) if(sb.charAt(i)=='?') sb.setCharAt(i, 'z');

				out.println("YES");
				out.println(sb);
			} else {
				out.println("NO");
			}
		}
	}

	static void sort(int[] arr) {
		ArrayList<Integer> al = new ArrayList();
		for(int i : arr) al.add(i);
		Collections.sort(al);
		int idx = 0;
		for(int i : al) arr[idx++] = i;
	}
	static void sort(long[] arr) {
		ArrayList<Long> al = new ArrayList();
		for(long i : arr) al.add(i);
		Collections.sort(al);
		int idx = 0;
		for(long i : al) arr[idx++] = i;
	}
	static void sortDec(int[] arr) {
		ArrayList<Integer> al = new ArrayList();
		for(int i : arr) al.add(i);
		Collections.sort(al,Collections.reverseOrder());
		int[] ret = new int[arr.length];
		int idx = 0;
		for(int i : al) arr[idx++] = i;
	}
	static void sortDec(long[] arr) {
		ArrayList<Long> al = new ArrayList();
		for(long i : arr) al.add(i);
		Collections.sort(al,Collections.reverseOrder());
		int idx = 0;
		for(long i : al) arr[idx++] = i;
	}

	static class InputReader {
		private boolean finished = false;

		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 int peek() {
			if (numChars == -1) {
				return -1;
			}
			if (curChar >= numChars) {
				curChar = 0;
				try {
					numChars = stream.read(buf);
				} catch (IOException e) {
					return -1;
				}
				if (numChars <= 0) {
					return -1;
				}
			}
			return buf[curChar];
		}

		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 String nextString() {
			int c = read();
			while (isSpaceChar(c)) {
				c = read();
			}
			StringBuilder res = new StringBuilder();
			do {
				if (Character.isValidCodePoint(c)) {
					res.appendCodePoint(c);
				}
				c = read();
			} while (!isSpaceChar(c));
			return res.toString();
		}

		public boolean isSpaceChar(int c) {
			if (filter != null) {
				return filter.isSpaceChar(c);
			}
			return isWhitespace(c);
		}

		public static boolean isWhitespace(int c) {
			return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
		}

		private String readLine0() {
			StringBuilder buf = new StringBuilder();
			int c = read();
			while (c != '\n' && c != -1) {
				if (c != '\r') {
					buf.appendCodePoint(c);
				}
				c = read();
			}
			return buf.toString();
		}

		public String readLine() {
			String s = readLine0();
			while (s.trim().length() == 0) {
				s = readLine0();
			}
			return s;
		}

		public String readLine(boolean ignoreEmptyLines) {
			if (ignoreEmptyLines) {
				return readLine();
			} else {
				return readLine0();
			}
		}

		public BigInteger readBigInteger() {
			try {
				return new BigInteger(nextString());
			} catch (NumberFormatException e) {
				throw new InputMismatchException();
			}
		}

		public char nextCharacter() {
			int c = read();
			while (isSpaceChar(c)) {
				c = read();
			}
			return (char) c;
		}

		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 boolean isExhausted() {
			int value;
			while (isSpaceChar(value = peek()) && value != -1) {
				read();
			}
			return value == -1;
		}

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

		public SpaceCharFilter getFilter() {
			return filter;
		}

		public void setFilter(SpaceCharFilter filter) {
			this.filter = filter;
		}

		public interface SpaceCharFilter {
			public boolean isSpaceChar(int ch);
		}
		public int[] nextIntArray(int n){
			int[] array=new int[n];
			for(int i=0;i<n;++i)array[i]=nextInt();
			return array;
		}
		public int[] nextSortedIntArray(int n){
			int array[]=nextIntArray(n);
			Arrays.sort(array);
			return array;
		}
		public int[] nextSumIntArray(int n){
			int[] array=new int[n];
			array[0]=nextInt();
			for(int i=1;i<n;++i)array[i]=array[i-1]+nextInt();
			return array;
		}
		public long[] nextLongArray(int n){
			long[] array=new long[n];
			for(int i=0;i<n;++i)array[i]=nextLong();
			return array;
		}
		public long[] nextSumLongArray(int n){
			long[] array=new long[n];
			array[0]=nextInt();
			for(int i=1;i<n;++i)array[i]=array[i-1]+nextInt();
			return array;
		}
		public long[] nextSortedLongArray(int n){
			long array[]=nextLongArray(n);
			Arrays.sort(array);
			return array;
		}
	}

}


import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.InputMismatchException;

/**
 * @author Mubtasim Shahriar
 */

public class Cr657A {

	public static void main(String[] args) {

		InputStream inputStream = System.in;
		OutputStream outputStream = System.out;
		InputReader sc = new InputReader(inputStream);
		PrintWriter out = new PrintWriter(outputStream);
		Solver solver = new Solver();
		int t = sc.nextInt();
//		int t = 1;
		while(t--!=0) {
			solver.solve(sc, out);
		}
		out.close();

	}

	static class Solver {
		public void solve(InputReader sc, PrintWriter out) {
			int n = sc.nextInt();
			String s = sc.next();
			StringBuilder sb = new StringBuilder();
			String aa = "abacaba";
			int fidx = -1;
			boolean found = false;
			int ocr = 0;
			int norocr = -1;
			for(int i = 0; i < n; i++) {
				if(i+6>=n) break;
				if(s.substring(i,i+7).equals(aa)) {
					ocr++;
					norocr = i;
				}
			}
			if(ocr>=2) {
				out.println("NO");
				return;
			}
			if(norocr!=-1) {
				sb = new StringBuilder(s);
				for(int i = 0; i < norocr; i++) if(sb.charAt(i)=='?') sb.setCharAt(i, 'z');
				for(int i = norocr + 7; i < n; i++) if(sb.charAt(i)=='?') sb.setCharAt(i, 'z');
				out.println("YES");
				out.println(sb);
				return;
			}
			for(int i = 0; i < n; i++) {
				if(i+6>=n) break;
				sb = new StringBuilder(s);
				int idx = 0;
				for(int j = i; j < i+7; j++) {
					if(sb.charAt(j)=='?') sb.setCharAt(j, aa.charAt(idx));
					idx++;
				}
				if(sb.substring(i,i+7).equals(aa)) {
					found = true;
					fidx = i;
					break;
				}
			}
			if(found) {
				for(int i = 0; i < fidx; i++) if(sb.charAt(i)=='?') sb.setCharAt(i, 'z');
				for(int i = fidx + 7; i < n; i++) if(sb.charAt(i)=='?') sb.setCharAt(i, 'z');

				out.println("YES");
				out.println(sb);
			} else {
				out.println("NO");
			}
		}
	}

	static void sort(int[] arr) {
		ArrayList<Integer> al = new ArrayList();
		for(int i : arr) al.add(i);
		Collections.sort(al);
		int idx = 0;
		for(int i : al) arr[idx++] = i;
	}
	static void sort(long[] arr) {
		ArrayList<Long> al = new ArrayList();
		for(long i : arr) al.add(i);
		Collections.sort(al);
		int idx = 0;
		for(long i : al) arr[idx++] = i;
	}
	static void sortDec(int[] arr) {
		ArrayList<Integer> al = new ArrayList();
		for(int i : arr) al.add(i);
		Collections.sort(al,Collections.reverseOrder());
		int[] ret = new int[arr.length];
		int idx = 0;
		for(int i : al) arr[idx++] = i;
	}
	static void sortDec(long[] arr) {
		ArrayList<Long> al = new ArrayList();
		for(long i : arr) al.add(i);
		Collections.sort(al,Collections.reverseOrder());
		int idx = 0;
		for(long i : al) arr[idx++] = i;
	}

	static class InputReader {
		private boolean finished = false;

		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 int peek() {
			if (numChars == -1) {
				return -1;
			}
			if (curChar >= numChars) {
				curChar = 0;
				try {
					numChars = stream.read(buf);
				} catch (IOException e) {
					return -1;
				}
				if (numChars <= 0) {
					return -1;
				}
			}
			return buf[curChar];
		}

		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 String nextString() {
			int c = read();
			while (isSpaceChar(c)) {
				c = read();
			}
			StringBuilder res = new StringBuilder();
			do {
				if (Character.isValidCodePoint(c)) {
					res.appendCodePoint(c);
				}
				c = read();
			} while (!isSpaceChar(c));
			return res.toString();
		}

		public boolean isSpaceChar(int c) {
			if (filter != null) {
				return filter.isSpaceChar(c);
			}
			return isWhitespace(c);
		}

		public static boolean isWhitespace(int c) {
			return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
		}

		private String readLine0() {
			StringBuilder buf = new StringBuilder();
			int c = read();
			while (c != '\n' && c != -1) {
				if (c != '\r') {
					buf.appendCodePoint(c);
				}
				c = read();
			}
			return buf.toString();
		}

		public String readLine() {
			String s = readLine0();
			while (s.trim().length() == 0) {
				s = readLine0();
			}
			return s;
		}

		public String readLine(boolean ignoreEmptyLines) {
			if (ignoreEmptyLines) {
				return readLine();
			} else {
				return readLine0();
			}
		}

		public BigInteger readBigInteger() {
			try {
				return new BigInteger(nextString());
			} catch (NumberFormatException e) {
				throw new InputMismatchException();
			}
		}

		public char nextCharacter() {
			int c = read();
			while (isSpaceChar(c)) {
				c = read();
			}
			return (char) c;
		}

		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 boolean isExhausted() {
			int value;
			while (isSpaceChar(value = peek()) && value != -1) {
				read();
			}
			return value == -1;
		}

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

		public SpaceCharFilter getFilter() {
			return filter;
		}

		public void setFilter(SpaceCharFilter filter) {
			this.filter = filter;
		}

		public interface SpaceCharFilter {
			public boolean isSpaceChar(int ch);
		}
		public int[] nextIntArray(int n){
			int[] array=new int[n];
			for(int i=0;i<n;++i)array[i]=nextInt();
			return array;
		}
		public int[] nextSortedIntArray(int n){
			int array[]=nextIntArray(n);
			Arrays.sort(array);
			return array;
		}
		public int[] nextSumIntArray(int n){
			int[] array=new int[n];
			array[0]=nextInt();
			for(int i=1;i<n;++i)array[i]=array[i-1]+nextInt();
			return array;
		}
		public long[] nextLongArray(int n){
			long[] array=new long[n];
			for(int i=0;i<n;++i)array[i]=nextLong();
			return array;
		}
		public long[] nextSumLongArray(int n){
			long[] array=new long[n];
			array[0]=nextInt();
			for(int i=1;i<n;++i)array[i]=array[i-1]+nextInt();
			return array;
		}
		public long[] nextSortedLongArray(int n){
			long array[]=nextLongArray(n);
			Arrays.sort(array);
			return array;
		}
	}

}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.*;

import java.io.*;

public class cf {
	static InputReader obj = new InputReader(System.in);
	static long mod = (long)1e9+7;
	public static void main(String args[]) {
		main();
	}

	static void main() {
		int t=obj.nextInt();
		StringBuilder aBuilder = new StringBuilder();
		while(t-->0) {
			int n=obj.nextInt();
			String s = obj.next();
			char chr[] = new char[] {'a','b','a','c','a','b','a'};
			int cnt=0;
			for(int i=0;i<=n-7;i++) {
				if(s.substring(i, i+7).equals("abacaba")) cnt++;
			}
			if(cnt>1) aBuilder.append("NO\n");
			else if(cnt==1) {
				StringBuilder anStringBuilder = new StringBuilder(s);
				for(int i=0;i<n;i++) {
					char x=anStringBuilder.charAt(i);
					if(x=='?') anStringBuilder.replace(i, i+1, "z");
				}
				aBuilder.append("YES\n");
				aBuilder.append(anStringBuilder+"\n");
			}
			else {
				int idx=-1;
				for(int i=0;i<n;i++) {
					char c = s.charAt(i);
					if((c=='a' || c=='?') && check(s, i, chr,n)){
						idx=i;
						break;
					}
				}
				if(idx==-1) aBuilder.append("NO\n");
				else {
					StringBuilder anStringBuilder = new StringBuilder(s);
					anStringBuilder.replace(idx, idx+7, "abacaba");
					for(int i=0;i<n;i++) {
						char x=anStringBuilder.charAt(i);
						if(x=='?') anStringBuilder.replace(i, i+1, "z");
					}
					cnt=0;
					for(int i=0;i<=n-7;i++) {
						if(anStringBuilder.substring(i, i+7).equals("abacaba")) cnt++;
					}
					if(cnt==1) {
						aBuilder.append("YES\n");
						aBuilder.append(anStringBuilder+"\n");
					}
					else aBuilder.append("NO\n");

				}
			}
		}
		System.out.println(aBuilder);
	}

	public static boolean check(String s, int i, char[] chr, int n) {
		int cnt=0;
		for(int j=i;j<s.length()&&j<7;j++) {
			if(s.charAt(j)=='?') cnt++;
			else if(s.charAt(j)==chr[j]) cnt++;
			else return false;
		}
		return cnt==7;

	}

	public static void dfs(HashSet<Integer> graph[], int v, boolean vis[], List<Integer>order) {
		vis[v]=true;
		for(int x: graph[v]) if(!vis[x]) dfs(graph,x,vis,order);
		order.add(v);

	}

	public static void input(int arr[], int n) {
		for(int i=0;i<n;i++) {
	    	arr[i] = obj.nextInt();
	    }
	}

	public static class InputReader {
	    public BufferedReader reader;
	    public StringTokenizer tokenizer;
	    public InputReader(InputStream stream) {
	        reader = new BufferedReader(new InputStreamReader(stream), 32768);
	        tokenizer = null;
	    }

	    public String next() {
	        while (tokenizer == null || !tokenizer.hasMoreTokens()) {
	            try {
	                tokenizer = new StringTokenizer(reader.readLine());
	            } catch (IOException e) {
	                throw new RuntimeException(e);
	            }
	        }
	        return tokenizer.nextToken();
	    }

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

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

}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.*;

import java.io.*;

public class cf {
	static InputReader obj = new InputReader(System.in);
	static long mod = (long)1e9+7;
	public static void main(String args[]) {
		main();
	}

	static void main() {
		int t=obj.nextInt();
		StringBuilder aBuilder = new StringBuilder();
		while(t-->0) {
			int n=obj.nextInt();
			String s = obj.next();
			char chr[] = new char[] {'a','b','a','c','a','b','a'};
			int cnt=0;
			for(int i=0;i<=n-7;i++) {
				if(s.substring(i, i+7).equals("abacaba")) cnt++;
			}
			if(cnt>1) aBuilder.append("NO\n");
			else if(cnt==1) {
				StringBuilder anStringBuilder = new StringBuilder(s);
				for(int i=0;i<n;i++) {
					char x=anStringBuilder.charAt(i);
					if(x=='?') anStringBuilder.replace(i, i+1, "z");
				}
				aBuilder.append("YES\n");
				aBuilder.append(anStringBuilder+"\n");
			}
			else {
				int idx=-1;
				for(int i=0;i<n;i++) {
					char c = s.charAt(i);
					if((c=='a' || c=='?') && check(s, i, chr,n)){
						idx=i;
						break;
					}
				}
				if(idx==-1) aBuilder.append("NO\n");
				else {
					StringBuilder anStringBuilder = new StringBuilder(s);
					anStringBuilder.replace(idx, idx+7, "abacaba");
					for(int i=0;i<n;i++) {
						char x=anStringBuilder.charAt(i);
						if(x=='?') anStringBuilder.replace(i, i+1, "z");
					}
					aBuilder.append("YES\n");
					aBuilder.append(anStringBuilder+"\n");
				}
			}
		}
		System.out.println(aBuilder);
	}

	public static boolean check(String s, int i, char[] chr, int n) {
		int cnt=0;
		for(int j=i;j<s.length()&&j<7;j++) {
			if(s.charAt(j)=='?') cnt++;
			else if(s.charAt(j)==chr[j]) cnt++;
			else return false;
		}
		return cnt==7;

	}

	public static void dfs(HashSet<Integer> graph[], int v, boolean vis[], List<Integer>order) {
		vis[v]=true;
		for(int x: graph[v]) if(!vis[x]) dfs(graph,x,vis,order);
		order.add(v);

	}

	public static void input(int arr[], int n) {
		for(int i=0;i<n;i++) {
	    	arr[i] = obj.nextInt();
	    }
	}

	public static class InputReader {
	    public BufferedReader reader;
	    public StringTokenizer tokenizer;
	    public InputReader(InputStream stream) {
	        reader = new BufferedReader(new InputStreamReader(stream), 32768);
	        tokenizer = null;
	    }

	    public String next() {
	        while (tokenizer == null || !tokenizer.hasMoreTokens()) {
	            try {
	                tokenizer = new StringTokenizer(reader.readLine());
	            } catch (IOException e) {
	                throw new RuntimeException(e);
	            }
	        }
	        return tokenizer.nextToken();
	    }

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

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

}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.*;

import java.io.*;

public class cf {
	static InputReader obj = new InputReader(System.in);
	static long mod = (long)1e9+7;
	public static void main(String args[]) {
		main();
	}

	static void main() {
		int t=obj.nextInt();
		StringBuilder aBuilder = new StringBuilder();
		while(t-->0) {
			int n=obj.nextInt();
			String s = obj.next();
			char chr[] = new char[] {'a','b','a','c','a','b','a'};
			int cnt=0;
			for(int i=0;i<=n-7;i++) {
				if(s.substring(i, i+7).equals("abacaba")) cnt++;
			}
			if(cnt>1) aBuilder.append("NO\n");
			else if(cnt==1) {
				StringBuilder anStringBuilder = new StringBuilder(s);
				for(int i=0;i<n;i++) {
					char x=anStringBuilder.charAt(i);
					if(x=='?') anStringBuilder.replace(i, i+1, "z");
				}
				aBuilder.append("YES\n");
				aBuilder.append(anStringBuilder+"\n");
			}
			else {
				int idx=-1;
				for(int i=0;i<n;i++) {
					char c = s.charAt(i);
					if((c=='a' || c=='?') && check(s, i, chr,n)){
						idx=i;
						break;
					}
				}
				if(idx==-1) aBuilder.append("NO\n");
				else {
					StringBuilder anStringBuilder = new StringBuilder(s);
					anStringBuilder.replace(idx, idx+7, "abacaba");
					for(int i=0;i<n;i++) {
						char x=anStringBuilder.charAt(i);
						if(x=='?') anStringBuilder.replace(i, i+1, "z");
					}
					cnt=0;
					for(int i=0;i<=n-7;i++) {
						if(s.substring(i, i+7).equals("abacaba")) cnt++;
					}
					if(cnt==1) {
						aBuilder.append("YES\n");
						aBuilder.append(anStringBuilder+"\n");
					}
					else aBuilder.append("NO\n");

				}
			}
		}
		System.out.println(aBuilder);
	}

	public static boolean check(String s, int i, char[] chr, int n) {
		int cnt=0;
		for(int j=i;j<s.length()&&j<7;j++) {
			if(s.charAt(j)=='?') cnt++;
			else if(s.charAt(j)==chr[j]) cnt++;
			else return false;
		}
		return cnt==7;

	}

	public static void dfs(HashSet<Integer> graph[], int v, boolean vis[], List<Integer>order) {
		vis[v]=true;
		for(int x: graph[v]) if(!vis[x]) dfs(graph,x,vis,order);
		order.add(v);

	}

	public static void input(int arr[], int n) {
		for(int i=0;i<n;i++) {
	    	arr[i] = obj.nextInt();
	    }
	}

	public static class InputReader {
	    public BufferedReader reader;
	    public StringTokenizer tokenizer;
	    public InputReader(InputStream stream) {
	        reader = new BufferedReader(new InputStreamReader(stream), 32768);
	        tokenizer = null;
	    }

	    public String next() {
	        while (tokenizer == null || !tokenizer.hasMoreTokens()) {
	            try {
	                tokenizer = new StringTokenizer(reader.readLine());
	            } catch (IOException e) {
	                throw new RuntimeException(e);
	            }
	        }
	        return tokenizer.nextToken();
	    }

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

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

}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.*;

import java.io.*;

public class cf {
	static InputReader obj = new InputReader(System.in);
	static long mod = (long)1e9+7;
	public static void main(String args[]) {
		main();
	}

	static void main() {
		int t=obj.nextInt();
		StringBuilder aBuilder = new StringBuilder();
		while(t-->0) {
			int n=obj.nextInt();
			String s = obj.next();
			char chr[] = new char[] {'a','b','a','c','a','b','a'};
			int cnt=check2(s, n);

			if(cnt>1) aBuilder.append("NO\n");
			else if(cnt==1) {
				StringBuilder anStringBuilder = new StringBuilder(s);
				for(int i=0;i<n;i++) {
					char x=anStringBuilder.charAt(i);
					if(x=='?') anStringBuilder.replace(i, i+1, "z");
				}
				aBuilder.append("YES\n");
				aBuilder.append(anStringBuilder+"\n");
			}
			else {
				boolean chk=false;
				for(int i=0;i<n;i++) {
					char c = s.charAt(i);
					if((c=='a' || c=='?') && i+7<=n&& check(s, i, chr,n)){
						StringBuilder anStringBuilder = new StringBuilder(s);
						anStringBuilder.replace(i, i+7, "abacaba");
						int x = check2(anStringBuilder.toString(), n);
						if(x==1) {
							for(int j=0;j<n;j++) {
								char z=anStringBuilder.charAt(j);
								if(z=='?') anStringBuilder.replace(j, j+1, "z");
							}
							aBuilder.append("YES\n"+anStringBuilder+"\n");
							chk=true;
							break;
						}
					}
				}
				if(!chk) aBuilder.append("NO\n");
			}
		}
		System.out.println(aBuilder);
	}
	public static int check2(String s, int n) {
		int cnt=0;
		for(int i=0;i<=n-7;i++) {
			if(s.substring(i, i+7).equals("abacaba")) cnt++;
		}

		return cnt;
	}
	public static boolean check(String s, int i, char[] chr, int n) {
		int cnt=0;
		for(int j=i;j<s.length()&&j-i<7;j++) {
			if(s.charAt(j)=='?') cnt++;
			else if(s.charAt(j)==chr[j-i]) cnt++;
			else return false;
		}
		return cnt==7;

	}

	public static void dfs(HashSet<Integer> graph[], int v, boolean vis[], List<Integer>order) {
		vis[v]=true;
		for(int x: graph[v]) if(!vis[x]) dfs(graph,x,vis,order);
		order.add(v);

	}

	public static void input(int arr[], int n) {
		for(int i=0;i<n;i++) {
	    	arr[i] = obj.nextInt();
	    }
	}

	public static class InputReader {
	    public BufferedReader reader;
	    public StringTokenizer tokenizer;
	    public InputReader(InputStream stream) {
	        reader = new BufferedReader(new InputStreamReader(stream), 32768);
	        tokenizer = null;
	    }

	    public String next() {
	        while (tokenizer == null || !tokenizer.hasMoreTokens()) {
	            try {
	                tokenizer = new StringTokenizer(reader.readLine());
	            } catch (IOException e) {
	                throw new RuntimeException(e);
	            }
	        }
	        return tokenizer.nextToken();
	    }

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

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

}


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

public class Solveaproblem {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int t = Integer.parseInt(reader.readLine());
        StringBuilder ans = new StringBuilder();
        char[] s = new char[]{'a', 'b', 'a', 'c', 'a', 'b', 'a'};
        while (t-->0) {
            int n = Integer.parseInt(reader.readLine());
            char[] arr = reader.readLine().toCharArray();
            String res = "No\n";
            for (int i=0; i<n-6; i++) {
                boolean[] change = new boolean[7];
                if (arr[i]=='?') {
                    for (int j=0; j<7; j++) {
                        if (arr[i+j]=='?') {
                            arr[i+j] = s[j];
                            change[j] = true;
                        }
                    }
                }
                int amount = 0;
                for (int j=0; j<n-6; j++) {
                    boolean is = true;
                    for (int k=0; k<7; k++) {
                        if (arr[j+k]!=s[k]) {
                            is = false; break;
                        }
                    }
                    if (is) amount++;
                    if (amount>1) break;
                }
                if (amount==1) {
                    res = "Yes\n"; break;
                }
                if (change[0]) arr[i] = 'z';
                for (int j=1; j<7; j++) {
                    if (change[j]) arr[i+j] = '?';
                }
            }
            ans.append(res);
            if (res.equals("Yes\n")) {
                for (char elem:arr) {
                    if (elem=='?') ans.append('d');
                    else ans.append(elem);
                }
                ans.append("\n");
            }
        }
        PrintWriter writer = new PrintWriter(System.out);
        writer.print(ans);
        writer.close();
    }
}


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

public class Solveaproblem {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int t = Integer.parseInt(reader.readLine());
        StringBuilder ans = new StringBuilder();
        char[] s = new char[]{'a', 'b', 'a', 'c', 'a', 'b', 'a'};
        while (t-->0) {
            int n = Integer.parseInt(reader.readLine());
            char[] arr = reader.readLine().toCharArray();
            String res = "No\n";
            for (int i=0; i<n-6; i++) {
                boolean[] change = new boolean[7];
                for (int j=0; j<7; j++) {
                    if (arr[i+j]=='?') {
                        arr[i+j] = s[j];
                        change[j] = true;
                    }
                }
                int amount = 0;
                for (int j=0; j<n-6; j++) {
                    boolean is = true;
                    for (int k=0; k<7; k++) {
                        if (arr[j+k]!=s[k]) {
                            is = false; break;
                        }
                    }
                    if (is) amount++;
                    if (amount>1) break;
                }
                if (amount==1) {
                    res = "Yes\n"; break;
                }
                if (change[0]) arr[i] = 'z';
                for (int j=1; j<7; j++) {
                    if (change[j]) arr[i+j] = '?';
                }
            }
            ans.append(res);
            if (res.equals("Yes\n")) {
                for (char elem:arr) {
                    if (elem=='?') ans.append('d');
                    else ans.append(elem);
                }
                ans.append("\n");
            }
        }
        PrintWriter writer = new PrintWriter(System.out);
        writer.print(ans);
        writer.close();
    }
}