#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,a[200005],d[200005],vis[200005];
vector <int> ve[200005];
struct cmp
{
    bool operator()(pair <int,int> a, pair <int,int> b)
    {
        return a.second<b.second;
    }
};
void BFS01()
{
    priority_queue <pair<int,int>,vector<pair<int,int>>,cmp> q;
    for (int i=1;i<=n;i++) if (!d[i]) d[i]=1e18;
    for (int i=1;i<=n;i++) if (d[i]==1) q.push({i,1});
    while (q.size())
    {
        int i=q.top().first,j=q.top().second;
        q.pop();
        for (int j : ve[i]) if (d[j]>d[i]+1) d[j]=d[i]+1,q.push({j,d[j]});
    }
    for (int i=1;i<=n;i++) 
    {
        if (d[i]!=1e18) cout<<d[i]<<' ';
        else cout<<-1<<' ';
    }
}
signed main()
{
    ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    cin>>n;
    for (int i=1;i<=n;i++) cin>>a[i];
    for (int i=1;i<=n;i++) 
    {
        if (i-a[i]>=1 && (a[i]+a[i-a[i]])%2==1) d[i]=1;
        if (i+a[i]<=n && (a[i]+a[i+a[i]])%2==1) d[i]=1;
    }
    for (int i=1;i<=n;i++) 
    {
        if (i-a[i]>=1 && (a[i]+a[i-a[i]])%2==0) ve[i-a[i]].push_back(i);
        if (i+a[i]<=n && (a[i]+a[i+a[i]])%2==0) ve[i+a[i]].push_back(i);
    }
    BFS01();
    return 0;
}