#include<bits/stdc++.h>
using namespace std;
int n,dis1[2100005],dis2[200005],a[200005];
struct pi{
int id,step;
};
vector<int>nbr[200005];
void bfs(int dis[],int val){
queue<pi>q;
for(int i=1;i<=n;i++){
if(a[i]%2==val){
dis[i]=0;
q.push((pi){i,0});
}
else dis[i]=-1;
}
while(q.empty()==false){
int cur=q.front().id;
int step=q.front().step;
q.pop();
for(int i=0;i<nbr[cur].size();i++){
int nx=nbr[cur][i];
if(dis[nx]==-1){
dis[nx]=step+1;
pi nxt={nx,step+1};
q.push(nxt);
}
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
if(i-a[i]>=1) nbr[i-a[i]].push_back(i);
if(i+a[i]<=n) nbr[i+a[i]].push_back(i);
}
bfs(dis1,1);
bfs(dis2,0);
for(int i=1;i<=n;i++){
if(a[i]%2==1) cout<<dis2[i]<<" ";
else cout<<dis1[i]<<" ";
}
return 0;
}