#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)//多源bfs
{
    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)//没有有效的剪枝,导致队列太大,超内存,bfs求得的肯定是最短路径
            {
                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;
}