#include <bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f;
const int N=2e5+5;
vector<int>path[N];
int a[N],ans[N],d[N];
int n;
queue<int>que;
void bfs(vector<int> x,vector<int> y)
{
for(int i=1;i<=n;i++)
d[i]=inf;
while(!que.empty())
que.pop();
for(int i=0;i<x.size();i++)
{
que.push(x[i]);
d[x[i]]=0;
}
while(!que.empty())
{
int now=que.front();
que.pop();
for(int i=0;i<path[now].size();i++)
{
if(d[path[now][i]]==inf)
{
d[path[now][i]]=d[now]+1;
que.push(path[now][i]);
}
}
}
for(int i=0;i<y.size();i++)
{
if(d[y[i]]!=inf)
ans[y[i]]=d[y[i]];
}
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
for(int i=1;i<=n;i++)
{
ans[i]=-1;
path[i].clear();
}
vector<int>odd,even;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(a[i]&1)
odd.push_back(i);
else
even.push_back(i);
if(i-a[i]>=1)
path[i-a[i]].push_back(i);
if(i+a[i]<=n)
path[i+a[i]].push_back(i);
}
bfs(odd,even);
bfs(even,odd);
for(int i=1;i<=n;i++)
printf("%d ",ans[i]);
printf("\n");
}
return 0;
}