#include <bits/stdc++.h>
using namespace std;
void ga(int N, int *A) {
  for (int i(0); i < N; i++) scanf("%d", A + i);
}
struct NM {
  double x, y;
  NM(double x = 0, double y = 0) : x(x), y(y) {}
  inline NM operator+(const NM &v) const { return NM(x + v.x, y + v.y); }
  inline NM operator-(const NM &v) const { return NM(x - v.x, y - v.y); }
  inline NM operator*(const NM &v) const {
    return NM(x * v.x - y * v.y, x * v.y + y * v.x);
  }
  inline void operator/=(int d) { x /= d, y /= d; }
} w[(1 << 20) + 1];
int Z[(1 << 20)];
void fft(NM *a, int N, bool x) {
  for (int i(0); i < N; i++) {
    swap(a[i], a[Z[i]]);
    if (x) a[i].y = -a[i].y;
  }
  NM t;
  for (int l = 1; l < N; l *= 2)
    for (int i = 0; i < N; i += 2 * l)
      for (int j = i, k = i + l; j < i + l; j++, k++)
        t = a[k] * w[k - i], a[k] = a[j] - t, a[j] = a[j] + t;
}
int fft(long long *A, int L, long long *B, int M, long long *R) {
  static NM a[(1 << 20)], b[(1 << 20)];
  int N = 1, g = 0;
  while (N < 2 * max(L, M)) N *= 2;
  for (int i(0); i < N; i++) a[i] = b[i] = NM();
  for (int i(0); i < L; i++) a[i] = NM(A[i], 0);
  for (int i(0); i < M; i++) b[i] = NM(B[i], 0);
  while (N >> g > 1) ++g;
  for (int i(0); i < N; i++) {
    Z[i] = 0;
    for (int j(0); j < g; j++) Z[i] |= (i >> j & 1) << (g - 1 - j);
    Z[i] = max(Z[i], i);
  }
  w[1] = NM(1, 0);
  for (int i(0); i < g - 1; i++) {
    double t =
        3.141592653589793238462643383279502884197169399375105820974944592307816406286 /
        (N >> (g - 1 - i));
    NM z(cos(t), sin(t));
    for (int k(1 << i); k < 2 << i; k++)
      w[2 * k] = w[k], w[2 * k | 1] = w[k] * z;
  }
  fft(a, N, 0), fft(b, N, 0);
  for (int i(0); i < N; i++) a[i] = a[i] * b[i];
  fft(a, N, 1);
  for (int i(0); i < N; i++) R[i] = (a[i].x / N + .5);
  return L + M - 1;
}
vector<int> o;
char s[(1 << 20)];
int C[(1 << 20)], N, M, x;
long long A[(1 << 20)], B[(1 << 20)], R[(1 << 20)];
int main(void) {
  int _;
  scanf("%d", &_);
  for (int i(0); i < _; i++) {
    scanf("%d%s", &N, s), o.clear();
    for (int i(0); i < 2 * N; i++) A[i] = B[i] = C[i] = 0;
    for (int i(0); i < N; i++)
      if (s[i] == 'V')
        A[i] = 1;
      else if (s[i] ^ 63)
        B[N - i - 1] = 1;
    M = fft(A, N, B, N, R);
    for (int i(0); i < M; i++)
      if (R[i]) ++C[abs(N - i - 1)];
    for (int k(1); k < N + 1; k++) {
      x = 1;
      for (int i = k; i < N && x; i += k) x &= !C[i];
      if (x) o.push_back(k);
    }
    printf("%lu\n", o.size());
    for (int i(0); i < (int)o.size(); i++)
      printf("%d%c", o[i], i + 1 == (int)o.size() ? 10 : 32);
  }
  return 0;
}
