#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5e5 + 10;
const double PI = 3.1415926535;
vector<complex<double> > FFT(int n, double theta, vector<complex<double> > a) {
  for (int m = n; m >= 2; m >>= 1) {
    int mh = m >> 1;
    for (int i = 0; i < mh; i++) {
      complex<double> w = exp(i * theta * complex<double>(0, 1));
      for (int j = i; j < n; j += m) {
        int k = j + mh;
        complex<double> x = a[j] - a[k];
        a[j] += a[k];
        a[k] = w * x;
      }
    }
    theta *= 2;
  }
  int i = 0;
  for (int j = 1; j < n - 1; j++) {
    for (int k = n >> 1; k > (i ^= k); k >>= 1) {
    }
    if (j < i) swap(a[i], a[j]);
  }
  return a;
}
vector<int> operator*(vector<int> A, vector<int> B) {
  vector<complex<double> > x, b;
  for (int i = 0; i < A.size() + B.size(); i++) {
    x.push_back(complex<double>(i < A.size() ? A[i] : 0, 0));
    b.push_back(complex<double>(i < B.size() ? B[i] : 0, 0));
  }
  int N = 1;
  while (N < x.size()) N <<= 1;
  while ((int)x.size() < N) {
    x.push_back(complex<double>(0, 0));
    b.push_back(complex<double>(0, 0));
  }
  x = FFT(N, 2 * PI / N, x);
  b = FFT(N, 2 * PI / N, b);
  for (int i = 0; i < N; i++) x[i] *= b[i];
  x = FFT(N, -2 * PI / N, x);
  vector<int> ret;
  for (int i = 0; i < x.size(); i++)
    ret.push_back((int)(x[i].real() / N + 0.5));
  while (ret.size() > 1 && ret.back() == 0) ret.pop_back();
  return ret;
}
vector<int> operator+(const vector<int> &a, const vector<int> &b) {
  vector<int> c(max((int)a.size(), (int)b.size()), 0);
  for (int i = 0; i < (int)a.size(); i++) c[i] += a[i];
  for (int i = 0; i < (int)b.size(); i++) c[i] += b[i];
  return c;
}
vector<int> a, b, c;
bool can[MAXN];
vector<int> ans;
void print(const vector<int> &a) {
  for (int i = 0; i < (int)a.size(); i++) cout << a[i] << " ";
}
int main() {
  ios_base::sync_with_stdio(false);
  int q;
  cin >> q;
  for (int test = 0; test < q; test++) {
    int n;
    cin >> n;
    string s;
    cin >> s;
    a.clear();
    b.clear();
    for (int j = 0; j < (int)s.length(); j++) a.push_back(s[j] == 'V');
    for (int j = 0; j < (int)s.length(); j++) b.push_back(s[n - j - 1] == 'K');
    c = a * b;
    c.resize((int)a.size() + (int)b.size() - 1);
    for (int i = 0; i <= (int)c.size() - i - 1; i++) {
      c[i] = c[(int)c.size() - i - 1] = c[(int)c.size() - i - 1] + c[i];
    }
    fill(can, can + n + 1, true);
    ans.clear();
    for (int i = n; i >= 1; i--) {
      if (can[i]) {
        if (n - i - 1 >= 0 && n - i - 1 < (int)c.size() && c[n - i - 1]) {
          for (int p = 1; p * p <= i; p++)
            if (i % p == 0) {
              can[p] = false, can[i / p] = false;
            }
        } else
          ans.push_back(i);
      }
    }
    reverse(ans.begin(), ans.end());
    cout << (int)ans.size() << endl;
    for (int i = 0; i < (int)ans.size(); i++) cout << ans[i] << " ";
    cout << endl;
  }
  return 0;
}
