func_code_string: #include <bits/stdc++.h>   using namespace std;   int t, n;   char s[505050];   int a[1 << 20], b[1 << 20];   const int L = 20, FN = (1 << L);   int rev[FN];   const long double pi = 3.1415926535897932384626433832795028841971l;   const long double two_pi = pi * 2;   struct cp {     long double x, y;     cp() {}     cp(long double _x) : x(_x), y(0) {}     cp(long double _x, long double _y) : x(_x), y(_y) {}     inline cp operator+(const cp &p) const { return cp(x + p.x, y + p.y); }     inline cp operator-(const cp &p) const { return cp(x - p.x, y - p.y); }     inline cp operator*(const cp &p) const {       return cp(x * p.x - y * p.y, x * p.y + y * p.x);     }     inline cp operator!() const { return cp(x, -y); }   } nw[FN + 1], f[FN], g[FN], h[FN];   void init() {     rev[0] = 0;     for (int i = 1; i < FN; i++)       rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << (L - 1));     nw[0] = nw[FN] = cp(1, 0);     for (int i = 1; i <= (FN >> 1); i++)       nw[i] = cp(cos(i * two_pi / FN), sin(i * two_pi / FN));     for (int i = (FN >> 1) + 1; i < FN; i++) nw[i] = !nw[FN - i];   }   void dft(cp *a, int n, int fg) {     int d = __builtin_ctz(FN / n);     for (int i = 0; i < n; i++)       if (i < (rev[i] >> d)) swap(a[i], a[rev[i] >> d]);     for (int size = 2; size <= n; size <<= 1) {       int step = FN / size;       if (fg) step = -step;       for (int i = 0; i < n; i += size) {         cp *u = a + i, *v = a + (i + (size >> 1)), *w = fg ? nw + FN : nw;         for (int k = (size >> 1); k--;) {           cp tmp = (*v) * (*w);           *v = *u - tmp, *u = *u + tmp;           u++, v++, w += step;         }       }     }     if (fg)       for (int i = 0; i < n; i++) a[i].x /= n, a[i].y /= n;   }   void func(int *a, int *b, int *c, int n) {     for (int i = 0; i < n; i++) {       f[i] = cp((long double)a[i]);       g[i] = cp((long double)b[i]);     }     dft(f, n, 0);     dft(g, n, 0);     for (int i = 0; i < n; i++) h[i] = f[i] * g[i];     dft(h, n, 1);     for (int i = 0; i < n; i++) c[i] = int(h[i].x + 0.5);   }   bool chk(int d) {     for (int i = d; i < n; i += d)       if (a[n + i] || a[n - i]) return false;     return true;   }   int ans[505050];   int main() {     init();     scanf( %d , &t);     while (t--) {       scanf( %d%s , &n, s);       int m = 1 << (33 - __builtin_clz(n - 1));       assert(m >= 2 * n);       for (int i = 0; i < m; i++) a[i] = b[i] = 0;       for (int i = 0; i < n; i++) {         if (s[i] ==  V )           a[i] = 1;         else if (s[i] ==  K )           b[n - i] = 1;       }       func(a, b, a, m);       int cnt = 0;       for (int i = 1; i <= n; i++) ans[i] = chk(i), cnt += ans[i];       cout << cnt << endl;       for (int i = 1; i <= n; i++)         if (ans[i]) printf( %d  , i);       puts(  );     }   }   