#include <bits/stdc++.h>
using namespace std;
typedef struct m1 {
  int step;
  long long int val;
  int index;
} m1;
long long int arr[1000001];
m1 m[1000001];
long long int answer[1000001];
int main() {
  long long int n, x, y, i;
  int step = 1;
  cin >> n;
  for (i = 1; i < n; i++) {
    cin >> arr[i];
    m[i].step = 0;
    m[i].index = -1;
  }
  for (i = 1; i <= n - 1; i++) {
    arr[0] = i;
    x = 1;
    y = 0;
    step = 1;
    while (1) {
      if (x <= 0 || x > n) {
        answer[i] = y;
        cout << y << endl;
        break;
      } else if (step == 1) {
        if (m[x - 1].step == 1 && m[x - 1].index == i) {
          cout << "-1" << endl;
          answer[i] = -1;
          break;
        } else if (m[x - 1].step == 1 && x != 1) {
          if (answer[m[x - 1].index] == -1) {
            answer[i] = -1;
          } else {
            answer[i] = y + answer[m[x - 1].index] - m[x - 1].val;
          }
          cout << answer[i] << endl;
          break;
        } else {
          m[x - 1].step = 1;
          m[x - 1].index = i;
          m[x - 1].val = y;
        }
        y += arr[x - 1];
        x += arr[x - 1];
        step = 2;
      } else if (step == 2) {
        if (m[x - 1].step == 2 && m[x - 1].index == i) {
          cout << "-1" << endl;
          answer[i] = -1;
          break;
        } else if (m[x - 1].step == 2 && x != 1) {
          if (answer[m[x - 1].index] == -1) {
            answer[i] = -1;
          } else {
            answer[i] = y + answer[m[x - 1].index] - m[x - 1].val;
          }
          cout << answer[i] << endl;
          break;
        } else {
          m[x - 1].step = 2;
          m[x - 1].index = i;
          m[x - 1].val = y;
        }
        y += arr[x - 1];
        x -= arr[x - 1];
        step = 1;
      }
    }
  }
  return 0;
}
