CF359D
#include<bits/stdc++.h>
using namespace std;
int n,a[1000010],f[1000010][20],g[1000010][20],l,r,mid,len,cnt,lg[1000010],ans[1000010];
long long gcd(long long x,long long y){
if(y==0){
return x;
}
return gcd(y,x%y);
}
long long ansmin(long long x,long long y){
long long len=lg[y-x+1];
return min(f[x][len],f[y-(1<<len)+1][len]);
}
long long ansgcd(long long x,long long y){
long long len=lg[y-x+1];
return gcd(f[x][len],f[y-(1<<len)+1][len]);
}
bool check(long long len){
for(int l=1;l+len<=n;l++){
int r=l+len;
if(ansgcd(l,r)==ansmin(l,r)){
return true;
}
}
return false;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
f[i][0]=a[i];
g[i][0]=a[i];
}
for(int j=1;(1<<j)<=n;j++){
for(int i=1;i+(1<<j)-1<=n;i++){
f[i][j]=min(f[i][j-1],f[i+(1<<(j-1))][j-1]);
g[i][j]=gcd(g[i][j-1],g[i+(1<<(j-1))][j-1]);
}
}
for(int i=2;i<=n;i++){
lg[i]=lg[i/2]+1;
}
l=0;
r=n-1;
while(l<=r){
mid=(l+r)/2;
if(check(mid)){
len=mid;
l=mid+1;
}else{
r=mid-1;
}
}
for(int l=1;l+len<=n;l++){
int r=l+len;
if(ansgcd(l,r)==ansmin(l,r)){
cnt++;
ans[cnt]=l;
}
}
cout<<cnt<<" "<<len<<endl;
for(int i=1;i<=cnt;i++){
cout<<ans[i]<<" ";
}
return 0;
}