1
2 2
1 1
1 2
 1
1 3
3
1 2 3
 1
1 1
1000
1000
 1
2 2
2 2
2 2
 5
4 5
10 8 6 4
1 2 3 4 5
1 1
3
3
1 1
3
2
5 3
1000 2 2 2 3
3 1 5
5 5
1 2 3 4 5
1 2 3 4 5
 1
4 4
1 1 1 1
1 2 3 4
 1
2 3
1 1
1 2 3

YES
1 1
 YES
1 3
 YES
1 1000
 YES
1 2
 YES
1 4
YES
1 3
NO
YES
1 3
YES
1 1
 YES
1 1
 YES
1 1

#include <bits/stdc++.h>
using namespace std;
int main() {
  int t;
  cin >> t;
  while (t--) {
    int n, flag = 0, mode = 0;
    cin >> n;
    string a;
    cin >> a;
    size_t found = a.find("abacaba", 0);
    if (found != string::npos) {
      if (n == 7) {
        cout << "YES" << endl;
        cout << a << endl;
      } else {
        int val = found + 7;
        string s = a.substr(val, n - 1);
        size_t found1 = s.find("caba");
        if (found1 != string::npos && found1 == 0) {
          flag = 1;
        }
        size_t found2 = s.find("abacaba");
        if (found2 != string::npos) flag = 1;
        if (flag != 1) {
          for (int i = 0; i < n; i++) {
            if (a[i] == '?') a[i] = 'z';
          }
          cout << "YES" << endl;
          cout << a << endl;
        } else {
          cout << "NO" << endl;
        }
      }
    } else {
      for (int i = 0; i < n; i++) {
        if (a[i] == '?') {
          size_t found3 = a.find("abacaba");
          if (found3 != string::npos) mode = 1;
          if (mode == 0) {
            if ((a[i - 1] == 'a' && a[i - 2] == 'b') ||
                (a[i + 1] == 'a' && a[i + 2] == 'b'))
              a[i] = 'c';
            else if (a[i - 1] == 'a' || a[i + 1] == 'a')
              a[i] = 'b';
            else if (a[i - 1] != 'a' || a[i + 1] != 'a')
              a[i] = 'a';
          } else {
            a[i] = 'z';
          }
        }
      }
      size_t found4 = a.find("abacaba");
      if (found4 != string::npos) mode = 1;
      if (mode == 1) {
        cout << "YES" << endl;
        cout << a << endl;
      } else {
        cout << "NO" << endl;
      }
    }
  }
  return 0;
}
