```cpp
#include<vector>
#include<cstdio>
using namespace std;
const int p=10007,q=1500007,N=2e5+5;
typedef unsigned long long ul;
ul r[N],s[N],t[N];/*,v[1500010];int l[1500010],*/int a[N],e[N],g;
vector<pair<int,ul> > l[1500010];
int main(){
int n,z,o=0;ul y;scanf("%d",&n);t[0]=1;
for(int i=1;i<=n;++i) scanf("%d",&a[i]),t[i]=t[i-1]*p,r[i]=r[i-1]*p+a[i];
for(int i=n;i;--i) s[i]=s[i+1]*p+a[i];
for(int i=1,k;i<=n;++i){
k=0;
for(int j=1,x;j+i<n;j+=i){
/*x=j+i-1;y=r[x]-r[j-1]*t[i],z=s[j]-s[x+1]*t[i];
if(l[y%q]!=i || l[z%q]!=i || v[y%q]!=y || v[z%q]!=z)
++k,l[y%q]=l[z%q]=i,v[y%q]=y,v[z%q]=z;*/
x=j+i-1;y=min(r[x]-r[j-1]*t[i],s[j]-s[x+1]*t[i]);z=y%q;x=-1;
for(int h=l[z].size();h--;) if(l[z][h].second==y){x=h;break;}
if(x==-1) ++k,l[z].push_back(make_pair(i,y));
else if(l[z][x].first!=i) ++k,l[z][x].first=i;
}
if(k>o) o=k,e[g=1]=i;
else if(k==o) e[++g]=i;
}
printf("%d %d\n",o,g);
for(int i=1;i<=g;++i) printf("%d ",e[i]);
return 0;
}
```
by 星小雨 @ 2018-10-20 14:56:39