/**
* author: orzvanh14 ( )
* created: 23.12.2022 10:08:02
* too lazy to update time
**/
// i wants to take ioi
//binhtinhtutinkhongcaycunhungmotkhikhongcontutinnualatuyetvong
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define nn "\n"
#define pi pair<int, int>
#define fi first
#define se second
#define lb lower_bound
#define ub upper_bound
#define eb emplace_back
#define pb push_back
#define TASK " "
#define ms(a, x) memset(a, x, sizeof(a))
#define all(a) a.begin(), a.end()
#define All(a, n) a + 1, a + 1 + n
#define LOG 19
const int INF = 1e18;
const int mod = 1e9+7;
const int N = 2e5 + 5;
int MOD = 998244353;
int bit[200000];
struct node{
int kc, u, hk;
bool operator<(const node& other) const {
return kc > other.kc;
}
};
struct edge{
int v, w, h;
};
int n;
int ps[N];
map<int, int> cnt;
int ans = 0;
void nhap(){
cin >> n;
for(int i = 1; i <= n; i++){
int x; cin >> x;
ps[i] = ps[i -1] + x;
}
}
void solve(){
cnt[0] = 1;
for(int i = 1; i <= n; i++){
int target = ps[i] -0;
ans += cnt[target];
cnt[ps[i]]++;
}
cout << ans << nn;
}
signed main() {
// freopen("piggyback.in", "r", stdin);
// freopen("piggyback.out", "w", stdout);
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
nhap();
solve();
return (0 ^ 0);
}
LyoqCiAqICAgIGF1dGhvcjogIG9yenZhbmgxNCAoICApCiAqICAgIGNyZWF0ZWQ6IDIzLjEyLjIwMjIgMTA6MDg6MDIKICogICAgdG9vIGxhenkgdG8gdXBkYXRlIHRpbWUKKiovCi8vIGkgd2FudHMgdG8gdGFrZSBpb2kKLy9iaW5odGluaHR1dGlua2hvbmdjYXljdW5odW5nbW90a2hpa2hvbmdjb250dXRpbm51YWxhdHV5ZXR2b25nCiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgogCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKI2RlZmluZSBpbnQgbG9uZyBsb25nCiNkZWZpbmUgbm4gIlxuIgojZGVmaW5lIHBpIHBhaXI8aW50LCBpbnQ+CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBsYiBsb3dlcl9ib3VuZAojZGVmaW5lIHViIHVwcGVyX2JvdW5kCiNkZWZpbmUgZWIgZW1wbGFjZV9iYWNrCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgVEFTSyAiICIKIAojZGVmaW5lIG1zKGEsIHgpIG1lbXNldChhLCB4LCBzaXplb2YoYSkpCiNkZWZpbmUgYWxsKGEpIGEuYmVnaW4oKSwgYS5lbmQoKQojZGVmaW5lIEFsbChhLCBuKSBhICsgMSwgYSArIDEgKyBuCiAKI2RlZmluZSBMT0cgMTkKIAogCmNvbnN0IGludCBJTkYgPSAxZTE4Owpjb25zdCBpbnQgbW9kID0gMWU5Kzc7CmNvbnN0IGludCBOID0gMmU1ICArIDU7CmludCBNT0QgPSA5OTgyNDQzNTM7CmludCBiaXRbMjAwMDAwXTsKc3RydWN0IG5vZGV7CiAgICBpbnQga2MsIHUsIGhrOwogICAgYm9vbCBvcGVyYXRvcjwoY29uc3Qgbm9kZSYgb3RoZXIpIGNvbnN0IHsKICAgICAgICByZXR1cm4ga2MgPiBvdGhlci5rYzsgCiAgICB9Cn07CnN0cnVjdCBlZGdlewogICAgaW50IHYsIHcsIGg7Cn07CmludCBuOwppbnQgcHNbTl07Cm1hcDxpbnQsIGludD4gY250OwppbnQgYW5zID0gMDsKdm9pZCBuaGFwKCl7CiAgICBjaW4gPj4gbjsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKXsKICAgICAgICBpbnQgeDsgY2luID4+IHg7CiAgICAgICAgcHNbaV0gPSBwc1tpIC0xXSArIHg7CiAgICB9Cn0Kdm9pZCBzb2x2ZSgpewogICAgY250WzBdID0gMTsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKXsKICAgICAgICBpbnQgdGFyZ2V0ID0gcHNbaV0gLTA7CiAgICAgICAgYW5zICs9IGNudFt0YXJnZXRdOwogICAgICAgIGNudFtwc1tpXV0rKzsKICAgIH0KICAgIGNvdXQgPDwgYW5zIDw8IG5uOwp9CnNpZ25lZCBtYWluKCkgewogICAgLy8gZnJlb3BlbigicGlnZ3liYWNrLmluIiwgInIiLCBzdGRpbik7CiAgICAvLyBmcmVvcGVuKCJwaWdneWJhY2sub3V0IiwgInciLCBzdGRvdXQpOwogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CiAgICBjb3V0LnRpZSgwKTsKICAgIG5oYXAoKTsKICAgIHNvbHZlKCk7CiAgICByZXR1cm4gKDAgXiAwKTsKIAp9CiAK