#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1);
struct FFT {
  int N;
  vector<int> perm;
  void precalculate() {
    perm.resize(N);
    perm[0] = 0;
    for (int k = 1; k < N; k <<= 1) {
      for (int i = 0; i < k; i++) {
        perm[i] <<= 1;
        perm[i + k] = 1 + perm[i];
      }
    }
  }
  void fft(vector<complex<double> > &v, bool invert = false) {
    if (v.size() != perm.size()) {
      N = v.size();
      assert(N && (N & (N - 1)) == 0);
      precalculate();
    }
    for (int i = 0; i < N; i++)
      if (i < perm[i]) swap(v[i], v[perm[i]]);
    for (int len = 2; len <= N; len <<= 1) {
      double angle = 2 * PI / len;
      if (invert) angle = -angle;
      complex<double> factor = polar(1.0, angle);
      for (int i = 0; i < N; i += len) {
        complex<double> w(1);
        for (int j = 0; j < len / 2; j++) {
          complex<double> x = v[i + j], y = w * v[i + j + len / 2];
          v[i + j] = x + y;
          v[i + j + len / 2] = x - y;
          w *= factor;
        }
      }
    }
    if (invert)
      for (complex<double> &x : v) x /= N;
  }
  vector<complex<double> > multiply(vector<complex<double> > fa,
                                    vector<complex<double> > fb) {
    int n = 1;
    while (n < fa.size() + fb.size()) n <<= 1;
    fa.resize(n);
    fb.resize(n);
    fft(fa);
    fft(fb);
    for (int i = 0; i < n; i++) fa[i] *= fb[i];
    fft(fa, true);
    return fa;
  }
};
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int t;
  cin >> t;
  FFT fft;
  while (t--) {
    int n;
    string s;
    cin >> n >> s;
    vector<complex<double> > a(n), b(n), q(n), ans, qq;
    vector<int> cum(n + 1);
    for (int i = 0; i < n; i++)
      if (s[i] == '?')
        a[i] = complex<double>(0, 0), q[i] = complex<double>(1, 0),
        cum[i + 1]++;
      else
        a[i] = polar(1.0, PI * (s[i] - 'a'));
    for (int i = 1; i <= n; i++) cum[i] += cum[i - 1];
    b = a;
    reverse(b.begin(), b.end());
    ans = fft.multiply(a, b);
    vector<complex<double> > rq = q;
    reverse(rq.begin(), rq.end());
    qq = fft.multiply(q, rq);
    vector<bool> is(n + 1);
    is[n] = 1;
    for (int i = n - 1; i > 0; i--) {
      bool bad = false;
      for (int j = 2 * i; j < n; j += i)
        if (!is[j]) {
          bad = true;
          break;
        }
      if (bad) continue;
      int len = n - i;
      int lft = cum[n - i] - cum[0];
      int rgt = cum[n] - cum[i];
      int match = round(qq[n - 1 - i].real());
      int tar = len - lft - rgt + match;
      if (abs(ans[n - 1 - i].real() - tar) < 1e-3) is[i] = 1;
    }
    vector<int> out;
    for (int i = 1; i <= n; i++)
      if (is[i]) out.push_back(i);
    cout << out.size() << "\n";
    for (auto x : out) cout << x << " ";
    cout << "\n";
  }
}
