WA on #10
#include <bits/stdc++.h>
using namespace std;
inline int read(){
int x=0;bool f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=0;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return f?x:-x;
}
int d[200005],a[200005],n;
bool vis[200005];
int dfs(int x){
if(d[x]^(1<<25)) return d[x];
if(x+a[x]<=n)
if((a[x]^a[x+a[x]])&1) return d[x]=1;
else if(!vis[x]) vis[x]=1,d[x]=min(d[x],dfs(x+a[x])+1),vis[x]=0;
if(x>a[x])
if((a[x]^a[x-a[x]])&1) return d[x]=1;
else if(!vis[x]) vis[x]=1,d[x]=min(d[x],dfs(x-a[x])+1),vis[x]=0;
return d[x];
}
int main(){
n=read();
for(int i=1;i<=n;i++) a[i]=read(),d[i]=(1<<25);
for(int i=1;i<=n;i++) printf("%d ",(dfs(i)^(1<<25))?d[i]:-1);
return 0;
}