#includeusingnamespace std;#define ll long long#define all(x) (x).begin(), (x).end()constint maxn =200010;#define inf 1e18int n;
ll a[maxn];int c[maxn];voidprint_a(string s){printf("%s", s.c_str());for(int i =1; i <= n;++i){printf("%lld ", a[i]);}printf("\n");}// 树状数组 voidupdate(int x){for(; x >0; x -=(x &-x)){++c[x];}}
ll query(int x){
ll res =0;for(; x < maxn; x +=(x &-x)){
res += c[x];}return res;}voidsolve(){scanf("%d",&n);
a[0]=0;for(int i =1; i <= n;++i){scanf("%lld",&a[i]);
a[i]+= a[i-1];}// print_a("pre sum");for(int i =1; i <= n;++i){if(a[i]<0|| a[i]> a[n]){printf("-1\n");return;}}
vector<ll>ve(n);for(int i =1; i <= n;++i){
ve.push_back(a[i]);}sort(all(ve));
ve.resize(unique(all(ve))- ve.begin());
ll res =0;for(int i =1; i < n;++i){int pos =upper_bound(all(ve), a[i])- ve.begin();
res +=query(pos +1);update(pos);}printf("%lld\n", res);}intmain(){int t;// scanf("%d", &t);
t =1;while(t--){solve();}}