#include <bits/stdc++.h>
using namespace std;
const int MAXN = 4e6, Mod = 998244353;
int Add(int x, int y) {
  x += y;
  return x >= Mod ? x - Mod : x;
}
int Sub(int x, int y) {
  x -= y;
  return x < 0 ? x + Mod : x;
}
int Mul(int x, int y) { return 1ll * x * y % Mod; }
int Quick_pow(int x, int po) {
  int Ans = 1;
  for (; po; po >>= 1, x = Mul(x, x))
    if (po & 1) Ans = Mul(Ans, x);
  return Ans;
}
int Inv(int x) { return Quick_pow(x, Mod - 2); }
int Div(int x, int y) { return Mul(x, Inv(y)); }
const int G = 3, iG = 332748118;
int lim, ilim, rev[MAXN + 5];
void ntt(vector<int> &f, int ty) {
  for (int i = 0; i < lim; i++)
    if (i < rev[i]) swap(f[i], f[rev[i]]);
  for (int len = 2; len <= lim; len <<= 1) {
    int w = Quick_pow(ty == 1 ? G : iG, (Mod - 1) / len);
    for (int l = 0; l < lim; l += len) {
      for (int i = l, wk = 1; i < l + len / 2; i++, wk = Mul(wk, w)) {
        int t = Mul(wk, f[i + len / 2]);
        f[i + len / 2] = Sub(f[i], t);
        f[i] = Add(f[i], t);
      }
    }
  }
  if (ty == -1)
    for (int i = 0; i < lim; i++) f[i] = Mul(f[i], ilim);
}
vector<int> operator*(vector<int> f, vector<int> g) {
  int n = ((int)f.size()) + ((int)g.size()) - 1;
  for (lim = 1; lim < n; lim <<= 1)
    ;
  ilim = Inv(lim);
  for (int i = 0; i < lim; i++)
    rev[i] = (rev[i >> 1] >> 1) | (i & 1 ? lim >> 1 : 0);
  f.resize(lim);
  g.resize(lim);
  ntt(f, 1);
  ntt(g, 1);
  for (int i = 0; i < lim; i++) f[i] = Mul(f[i], g[i]);
  ntt(f, -1);
  f.resize(n);
  return f;
}
vector<int> operator+(vector<int> f, vector<int> g) {
  int n = max(((int)f.size()), ((int)g.size()));
  f.resize(n);
  g.resize(n);
  for (int i = 0; i < n; i++) f[i] = Add(f[i], g[i]);
  return f;
}
vector<int> operator-(vector<int> f, vector<int> g) {
  int n = max(((int)f.size()), ((int)g.size()));
  f.resize(n);
  g.resize(n);
  for (int i = 0; i < n; i++) f[i] = Sub(f[i], g[i]);
  return f;
}
vector<int> operator*(int k, vector<int> f) {
  for (int i = 0; i < ((int)f.size()); i++) f[i] = Mul(f[i], k);
  return f;
}
int t, n;
char S[MAXN + 5], T[MAXN + 5];
vector<int> f, g, h;
int main() {
  scanf("%d", &t);
  while (t--) {
    scanf("%d", &n);
    scanf("%s", T);
    f.resize(n);
    g.resize(n);
    for (int i = 0; i < ((int)g.size()); i++) S[i] = T[i];
    reverse(T, T + n);
    for (int i = 0; i < ((int)f.size()); i++)
      f[i] = Quick_pow(S[i] == '?' ? 0 : (S[i] - 'a' + 1), 3);
    for (int i = 0; i < ((int)g.size()); i++)
      g[i] = Quick_pow(T[i] == '?' ? 0 : (T[i] - 'a' + 1), 1);
    h = f * g;
    for (int i = 0; i < ((int)f.size()); i++)
      f[i] = Quick_pow(S[i] == '?' ? 0 : (S[i] - 'a' + 1), 1);
    for (int i = 0; i < ((int)g.size()); i++)
      g[i] = Quick_pow(T[i] == '?' ? 0 : (T[i] - 'a' + 1), 3);
    h = h + f * g;
    for (int i = 0; i < ((int)f.size()); i++)
      f[i] = Quick_pow(S[i] == '?' ? 0 : (S[i] - 'a' + 1), 2);
    for (int i = 0; i < ((int)g.size()); i++)
      g[i] = Quick_pow(T[i] == '?' ? 0 : (T[i] - 'a' + 1), 2);
    h = h - 2 * (f * g);
    vector<int> dex;
    dex.clear();
    dex.push_back(n);
    n--;
    for (int i = 1; i <= n; i++) {
      if (h[i - 1]) continue;
      int rd = (n + 1) - i, p = i, f = 1;
      while (p > rd) {
        p -= rd;
        if (h[p - 1]) {
          f = 0;
          break;
        }
      }
      if (f) dex.push_back(rd);
    }
    printf("%d\n", ((int)dex.size()));
    for (int i = ((int)dex.size()) - 1; i >= 0; i--) printf("%d ", dex[i]);
    puts("");
  }
  return 0;
}
