func_code_string: #include <bits/stdc++.h>   using namespace std;   const double pi = acos(-1.);   const int MX = 500500;   int t, n, i, j, z[MX];   char s[MX];   vector<complex<double> > a, b;   vector<int> r, ans;   void fft(vector<complex<double> >& a, bool inv) {     int n = a.size();     if (n == 1) return;     for (int i = 1, rv = 0; i < n; i++) {       int j = n / 2;       for (; rv >= j; j /= 2) rv -= j;       rv += j;       if (i < rv) swap(a[i], a[rv]);     }     for (int l = 2; l <= n; l *= 2) {       double alpha = 2 * pi / l;       if (inv) alpha = -alpha;       for (int i = 0; i < n; i += l) {         complex<double> w(1), wn(cos(alpha), sin(alpha));         for (int j = 0; j < l / 2; j++) {           complex<double> x = a[i + j];           complex<double> y = w * a[i + j + l / 2];           a[i + j] = x + y;           a[i + j + l / 2] = x - y;           w *= wn;         }       }     }     if (inv)       for (int i = 0; i < n; i++) a[i] /= n;   }   void mul(vector<complex<double> >& a, vector<complex<double> >& b) {     int n;     for (n = 1; n < a.size() || n < b.size(); n *= 2)       ;     n *= 2;     a.resize(n);     b.resize(n);     r.resize(n);     fft(a, false);     fft(b, false);     for (int i = 0; i < n; i++) a[i] *= b[i];     fft(a, true);     for (int i = 0; i < n; i++) r[i] = int(a[i].real() + 0.5);   }   int main() {     scanf( %d , &t);     while (t--) {       scanf( %d , &n);       scanf( %s , s);       a.resize(n);       b.resize(n);       for (i = 0; i < n; i++) a[i] = int(s[i] ==  V );       for (i = 0; i < n; i++) b[i] = int(s[n - i - 1] ==  K );       mul(a, b);       for (i = 1; i < n; i++) z[i] = r[n - 1 - i] + r[n - 1 + i];       ans.clear();       for (i = 1; i < n; i++)         if (z[i] == 0) {           for (j = i + i; j < n; j += i)             if (z[j] > 0) break;           if (j >= n) ans.push_back(i);         }       printf( %d n , int(ans.size()) + 1);       for (i = 0; i < ans.size(); i++) printf( %d  , ans[i]);       printf( %d n , n);     }     return 0;   }   