#include <bits/stdc++.h>
using namespace std;
vector<complex<double> > fft(vector<complex<double> > v, bool rev = false) {
  int n = v.size(), i, j, m;
  for (i = 0, j = 1; j < n - 1; j++) {
    for (int k = n >> 1; k > (i ^= k); k >>= 1)
      ;
    if (i > j) swap(v[i], v[j]);
  }
  for (int m = 2; m <= n; m *= 2) {
    double deg = (rev ? -1 : 1) * 2 * acos(-1) / m;
    complex<double> wr(cos(deg), sin(deg));
    for (i = 0; i < n; i += m) {
      complex<double> w(1, 0);
      for (int j1 = i, j2 = i + m / 2; j2 < i + m; j1++, j2++) {
        complex<double> t1 = v[j1], t2 = w * v[j2];
        v[j1] = t1 + t2, v[j2] = t1 - t2;
        w *= wr;
      }
    }
  }
  if (rev)
    for (i = 0; i < (n); i++) v[i] *= 1.0 / n;
  return v;
}
vector<complex<double> > MultPoly(vector<complex<double> > P,
                                  vector<complex<double> > Q) {
  P = fft(P), Q = fft(Q);
  for (int i = 0; i < P.size(); i++) P[i] *= Q[i];
  return fft(P, true);
}
int T, N;
string S;
int NG[505050];
const int prime_max = 700000;
int NP, prime[100000];
vector<int> divp[prime_max];
map<int, int> M;
void cprime() {
  for (int i = 2; i < prime_max; i++)
    if (divp[i].empty()) {
      prime[NP++] = i;
      for (signed long long j = i; j >= i && j < prime_max; j += i)
        divp[j].push_back(j / i);
    }
}
void solve() {
  int i, j, k, l, r, x, y;
  string s;
  cprime();
  cin >> T;
  while (T--) {
    cin >> N >> S;
    int L = 1;
    while (L <= 2 * N) L *= 2;
    vector<complex<double> > VA(L, 0), KA(L, 0), VB(L, 0), KB(L, 0);
    for (i = 0; i < (N); i++) {
      if (S[i] == 'V') VA[i] = VB[N - 1 - i] = 1;
      if (S[i] == 'K') KA[i] = KB[N - 1 - i] = 1;
    }
    auto A = MultPoly(VA, KB);
    auto B = MultPoly(KA, VB);
    NG[N] = 0;
    for (i = 1; i < N; i++) {
      NG[i] = 0;
      if ((int)(A[N - 1 - i].real() + 0.2) > 0 ||
          (int)(B[N - 1 - i].real() + 0.2) > 0)
        NG[i] = 1;
    }
    int cnt = 0;
    for (i = N; i >= 1; i--) {
      if (NG[i] == 0)
        cnt++;
      else {
        for (auto& e : divp[i]) NG[e] = 1;
      }
    }
    (void)printf("%d\n", cnt);
    for (i = 1; i <= N; i++)
      if (NG[i] == 0) (void)printf("%d%c", i, (i == N) ? '\n' : ' ');
  }
}
int main(int argc, char** argv) {
  string s;
  int i;
  if (argc == 1) ios::sync_with_stdio(false), cin.tie(0);
  for (i = 0; i < (argc - 1); i++) s += argv[i + 1], s += '\n';
  for (i = 0; i < (s.size()); i++) ungetc(s[s.size() - 1 - i], stdin);
  solve();
  return 0;
}
