#include<bits/stdc++.h>
#define lp long long
#define ulp unsigned long long
#define pa pair < lp , lp >
#define fi first
#define se second
#define mp make_pair
#define ls x<<1
#define rs x<<1|1
#define kp push_back
#define db double
#define itn insert
#define pc putchar
#define rep(i,x,y) for(lp i=(x);i<=(y);i++)
#define per(i,x,y) for(lp i=(x);i>=(y);i--)
using namespace std;
inline lp read(){
lp r=0,f=0;char c=getchar();
while(!isdigit(c))f=c=='-',c=getchar();
while(isdigit(c))r=r*10+(c^48),c=getchar();
return f?-r:r;
}
inline lp minn(lp a,lp b){return a<b?a:b;}
inline lp maxx(lp a,lp b){return a>b?a:b;}
//inline lp sqt(lp x){lp res=sqrt(x)+1;while(res*res>x)res--;return res;}
lp gcd(lp a,lp b){return !b?a:gcd(b,a%b);}
lp lcm(lp a,lp b){return a/gcd(a,b)*b;}
void wr(lp x){if(x<0)x=-x,pc('-');if(x>9)wr(x/10);pc(x%10+'0');}
const lp ml=1e6+101;
const lp inf=1e15;
//const lp mk=+101;
//const lp mo=1e9+7;
//const lp mo=998244353;
lp t,n,m,q;
lp ans;
lp x[ml],ins[ml];
//pa a[ml];
//char s[ml];
//string s;
//vector < lp > e[ml];
//map < lp , lp > atl;
//multiset < lp > s;
//---------------------------------------------------------------------------------------------------
//lp qpow(lp x,lp y=mo-2){lp res=1;while(y){if(y&1)res=res*x%mo;x=x*x%mo;y>>=1;}return res;}
/*
lp fac[ml],inv[ml];
void init_C(lp l){
fac[0]=inv[0]=1;
for(lp i=1;i<=l;i++)fac[i]=fac[i-1]*i%mo;
inv[l]=qpow(fac[l]);
for(lp i=l-1;i>=1;i--)inv[i]=inv[i+1]*(i+1)%mo;
}
lp C(lp a,lp b){
if(a<0||b<0||a<b)return 0;
return fac[a]*inv[b]%mo*inv[a-b]%mo;
}
*/
//---------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------
/*
struct BIT{
lp sz[ml];
lp query(lp x){lp res=0;for(;x>=1;x-=x&-x)res+=sz[x];return res;}
void modify(lp x,lp y=1){for(;x<=n;x+=x&-x)sz[x]+=y;}
}str;
*/
//----------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------
/*
-----------------------------------------------------------------------------------
鍔ㄦ€佸紑鐐?鍖洪棿淇敼&鏈€灏忓€?灏佽 鏉庤秴绾挎鏍?
auther:wuxingzhi
浣跨敤鍓嶏細init(鍊煎煙)锛屾敼ML
鍑芥暟锛歁odify,Query,init
Ps:姹傛渶澶у€肩洿鎺ユ妸涓変釜">"鏀规垚"<"锛屾妸鈥渞eturn inf"鏀规垚"return -inf"锛屾妸"minn"鏀规垚"maxx"
-----------------------------------------------------------------------------------
*/
/*
struct Lc{
#define lo lson[x]
#define ro rson[x]
static const lp ML=1e6+101;
const lp inf=1e15;
lp N,tot;
lp lson[ML<<2],rson[ML<<2],k[ML<<2],b[ML<<2],vis[ML<<2];
lp calc(lp x,lp k,lp b){return x*k+b;}
void init(lp Num){N=Num;for(lp i=1;i<=tot;i++)lson[i]=rson[i]=k[i]=b[i]=vis[i]=0;tot=1;}
lp modify(lp qk,lp qb,lp ql,lp qr,lp x,lp l,lp r){
if(!x)x=++tot;
lp mid=(l+r)>>1;
if(ql<=l&&qr>=r){
if(!vis[x]){vis[x]=1,k[x]=qk,b[x]=qb;return x;}
if(calc(mid,k[x],b[x])>calc(mid,qk,qb))swap(qk,k[x]),swap(qb,b[x]);
if(calc(l,k[x],b[x])>calc(l,qk,qb))lo=modify(qk,qb,ql,qr,lo,l,mid);
if(calc(r,k[x],b[x])>calc(r,qk,qb))ro=modify(qk,qb,ql,qr,ro,mid+1,r);
return x;
}
if(ql<=mid)lo=modify(qk,qb,ql,qr,lo,l,mid);
if(qr>mid)ro=modify(qk,qb,ql,qr,ro,mid+1,r);
return x;
}
lp query(lp d,lp x,lp l,lp r){
if(!vis[x]||!x)return inf;
lp res=calc(d,k[x],b[x]),mid=(l+r)>>1;
if(l==r)return res;
if(d<=mid)return minn(res,query(d,lo,l,mid));
else return minn(res,query(d,ro,mid+1,r));
}
void Modify(lp k,lp b,lp l=-1,lp r=-1){l==-1?modify(k,b,0,N,1,0,N):modify(k,b,l,r,1,0,N);}
lp Query(lp d){return query(d,1,0,N);}
#undef lo
#undef ro
}t;
*/
//-----------------------------------------------------------------------------------------------------------
const lp mk=22;
const lp L=21;
lp s[ml][mk];
lp get(lp l,lp r){
lp b=__lg(r-l+1);
return gcd(s[l][b],s[r-(1ll<<b)+1][b]);
}
void init(){
for(lp i=1;i<=n;i++)s[i][0]=x[i];
for(lp i=1;i<=L;i++)
for(lp j=1;j<=n-(1ll<<i)+1;j++)s[j][i]=gcd(s[j][i-1],s[j+(1ll<<(i-1))][i-1]);
}
int main(){
cin>>n;
for(lp i=1;i<=n;i++)x[i]=read();
init();
lp lst=0;
for(lp i=1;i<=n;i++){
lp l=lst+1,r=i,mid,res=-1;
while(l<=r){
mid=(l+r)>>1;
if(get(mid,i)-(i-mid+1)>=0)r=mid-1,res=mid;
else l=mid+1;
}
//cout<<endl<<" step inf "<<lst<<" "<<i<<" "<<res<<endl;
if((res==-1)||(get(res,i)!=i-res+1))cout<<ans<<" ";
else lst=i,ans++,cout<<ans<<" ";
}
return 0;
}