wrong answer On line 4 column 1, read 9, expected 6.
#include<bits/stdc++.h>
using namespace std;
const int N = 2e7 + 10;
char str[N];
string s;
int len;
int d[N];
bool ans[N];
void init()
{
str[0] = '#';
int j = 1;
for(int i = 0; i < s.size(); i ++)
{
str[j ++] = s[i] , str[j ++] = '#';
}
}
void manacher()
{
memset(ans , false , sizeof ans);
for(int i = 0, l = 0 , r = -1; i < len; i ++)
{
int k = (i > r) ? 1 : min(d[l + r - i] , r - i + 1);
while(i - k >= 0 && i + k < len && str[i - k] == str[i + k]) k ++;
d[i] = k --;
if(i + k > r)
{
r = i + k;
l = i - k;
}
}
}
void solve()
{
cin >> s;
init();
len = strlen(str);
manacher();
ans[s.size()] = true;
for(int i = s.size() - 1; i >= 0; i --)
{
int ri = d[i * 2 + 1];
if(ri > 1)
{
ri = ri / 2 - 1;
if(ri + i + 1 == s.size()) ans[i + 1] = true;
if(ans[ri + i + 1] && i - ri == 0) ans[i + 1] = true;
}
}
for(int i = 1; i <= s.size(); i ++)
if(ans[i])
printf("%d " , i);
printf("\n");
}
int main()
{
int t;
scanf("%d" , &t);
while(t --)
{
solve();
}
return 0;
}