#include <bits/stdc++.h>
using namespace std;
const long long OO = 2e18;
const double pi = 2 * acos(0.0);
bool isprime(long long int a) {
  if (a == 1) {
    return false;
  }
  for (int i = 2; i * i <= a; i++) {
    if (a % i == 0) {
      return false;
    }
  }
  return true;
}
bool iscoprime(int a, int b) {
  int i;
  for (i = 2; i <= min(a, b); i++) {
    if (a % i == 0 && b % i == 0) {
      return false;
    }
  }
  return true;
}
long long gcd(long long a, long long b) {
  if (b == 0) {
    return a;
  } else {
    return gcd(b, a % b);
  }
}
int maxA(vector<int> a) {
  int m = 0;
  for (int i = 0; i < a.size(); i++) {
    m = max(m, a[i]);
  }
  return m;
}
int minA(vector<int> a) {
  int m = 100000;
  for (int i = 0; i < a.size(); i++) {
    m = min(m, a[i]);
  }
  return m;
}
vector<int> freqN(vector<int> a, int n) {
  vector<int> f(n);
  f = {0};
  for (int i = 0; i < a.size(); i++) {
    f[a[i]]++;
  }
  return f;
}
vector<int> freqA(vector<int> a) {
  vector<int> f(26);
  f = {0};
  for (int i = 0; i < a.size(); i++) {
    f[a[i] - '0']++;
  }
  return f;
}
bool mycomp(const pair<long int, long int>& p1,
            const pair<long int, long int>& p2) {
  if (p1.second < p2.second)
    return true;
  else if (p1.second == p2.second)
    return p1.first < p2.first;
  else
    return false;
}
unsigned int rightmostsetbit(unsigned int n) { return n & -n; }
bool cmp(pair<string, int>& p1, pair<string, int>& p2) {
  if (p1.second == p2.second) return p1.first < p2.first;
  return p1.second > p2.second;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  long long int n;
  cin >> n;
  long long int q[n - 1], i;
  long long int mi = 0, sum = 0;
  for (i = 0; i < n - 1; i++) {
    cin >> q[i];
    sum += q[i];
    mi = min(sum, mi);
  }
  long long int a[n];
  a[0] = 1 - mi;
  set<int> s;
  s.insert(a[0]);
  bool flag = false;
  if (a[0] <= 0 || a[0] > n) {
    flag = true;
  }
  for (i = 1; i < n; i++) {
    a[i] = a[i - 1] + q[i - 1];
    if (a[i] <= 0 || a[i] > n) {
      flag = true;
      break;
    } else if (s.find(a[i]) != s.end()) {
      flag = true;
      break;
    } else {
      s.insert(a[i]);
    }
  }
  if (flag) {
    cout << "-1" << endl;
  } else {
    for (i = 0; i < n; i++) {
      cout << a[i] << " ";
    }
    cout << endl;
  }
}
