#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  for (; !isdigit(ch); ch = getchar()) {
    if (ch == '-') f = -1;
  }
  for (; isdigit(ch); ch = getchar()) {
    x = x * 10 + ch - 48;
  }
  return x * f;
}
const int N = 50;
char a[N + 3];
char str[N + 3];
int n, cnt[N + 3], q;
void query(char str[], int len) {
  printf("? ");
  for (int i = 1; i <= len; i++) printf("%c", str[i]);
  puts("");
  fflush(stdout);
  scanf("%d", &cnt[++q]);
  if (cnt[q] == -1) exit(0);
  for (int k = 1; k <= cnt[q]; k++) {
    int x;
    scanf("%d", &x);
    for (int i = 1; i <= len; i++) {
      a[x + i - 1] = str[i];
    }
  }
}
int main() {
  int T;
  scanf("%d", &T);
  while (T--) {
    scanf("%d", &n);
    memset(str, 0, sizeof(str)), memset(a, 0, sizeof(a));
    q = 0;
    str[1] = 'C', str[2] = 'O';
    query(str, 2);
    str[1] = 'H', str[2] = 'O';
    query(str, 2);
    str[1] = 'O', str[2] = 'O';
    query(str, 2);
    if (cnt[1] + cnt[2] + cnt[3] == 0) {
      str[1] = 'C', str[2] = 'H';
      query(str, 2);
      if (cnt[4] == 0 && n == 4) {
        str[1] = 'H', str[2] = 'H', str[3] = 'H';
        query(str, 3);
        if (cnt[5]) {
          str[4] = 'H';
          query(str, 4);
          if (cnt[6]) {
            for (int i = 1; i <= 4; i++) a[i] = str[i];
          } else {
            str[1] = 'O';
            query(str, 4);
            if (cnt[7]) {
              for (int i = 1; i <= 4; i++) a[i] = str[i];
            } else {
              a[1] = a[2] = a[3] = 'H', a[4] = 'C';
            }
          }
        } else {
          str[1] = 'C', str[2] = 'C', str[3] = 'C';
          query(str, 3);
          if (cnt[6]) {
            str[4] = 'C';
            query(str, 4);
            if (cnt[7]) {
              for (int i = 1; i <= 4; i++) a[i] = str[i];
            } else {
              str[1] = 'O';
              query(str, 4);
              if (!cnt[8]) str[1] = 'H';
              for (int i = 1; i <= 4; i++) a[i] = str[i];
            }
          } else {
            str[1] = 'O', str[2] = 'H', str[3] = 'H', str[4] = 'C';
            query(str, 4);
            if (cnt[7]) {
              for (int i = 1; i <= 4; i++) a[i] = str[i];
            } else {
              str[1] = 'O', str[2] = 'H', str[3] = 'C', str[4] = 'C';
              query(str, 4);
              if (cnt[8]) {
                for (int i = 1; i <= 4; i++) a[i] = str[i];
              } else {
                a[1] = 'H', a[2] = 'H', a[3] = 'C', a[4] = 'C';
              }
            }
          }
        }
      } else {
        str[1] = 'H', str[2] = 'C';
        query(str, 2);
        if (cnt[4] + cnt[5] == 0) {
          for (int i = 1; i <= n; i++) str[i] = 'C';
          query(str, n);
          if (cnt[6]) {
            for (int i = 1; i <= n; i++) a[i] = str[i];
          } else {
            for (int i = 1; i <= n; i++) str[i] = 'H';
            query(str, n);
            if (cnt[7]) {
              for (int i = 1; i <= n; i++) a[i] = str[i];
            } else {
              str[1] = 'O';
              for (int i = 2; i <= n; i++) str[i] = 'C';
              query(str, n);
              if (cnt[8]) {
                for (int i = 1; i <= n; i++) a[i] = str[i];
              } else {
                a[1] = 'O';
                for (int i = 2; i <= n; i++) a[i] = 'H';
              }
            }
          }
        } else {
          for (int i = n - 1; i >= 1; i--)
            if (!a[i]) a[i] = a[i + 1];
          for (int i = n; i >= 1; i--)
            if (a[i]) {
              for (int j = i + 1; j <= n; j++) a[j] = a[i];
              break;
            }
          for (int i = 1; i <= n; i++) str[i] = a[i];
          query(str, n);
          if (!cnt[6]) {
            a[1] = 'O';
          }
        }
      }
    } else {
      int pos;
      for (int i = n; i >= 1; i--)
        if (a[i] == 'O') {
          pos = i;
          break;
        }
      int l = pos - 1, r = pos;
      while (r < n) {
        r++;
        if (a[r]) continue;
        for (int i = l; i < r; i++) str[i - l + 1] = a[i];
        str[r - l + 1] = 'C';
        query(str, r - l + 1);
        if (!a[r]) {
          a[r] = 'H';
        }
      }
      while (l > 1) {
        l--;
        if (a[l]) {
          continue;
        }
        for (int i = l + 1; i <= r; i++) str[i - l + 1] = a[i];
        str[1] = 'C';
        query(str, r - l + 1);
        if (!a[l]) {
          a[l] = 'H';
        }
      }
      for (int i = 1; i <= n; i++) str[i] = a[i];
      query(str, n);
      if (cnt[q] == 0) {
        a[1] = 'O';
      }
    }
    printf("! ");
    puts(a + 1);
    fflush(stdout);
    int sta;
    scanf("%d", &sta);
    if (sta == -1) return 0;
  }
  return 0;
}
