#include <iostream>
#include <cstdio>
#include <algorithm>
#include <camth>
using namespace std;
const int maxn = 2e5+2;
long long num[maxn];
int main(){
    int n;
    scanf("%d",&n);
    for(int i = 0; i < n; i++){
        scanf("%d",&num[i]);
        if(i != 0)
            num[i] += num[i-1];//前缀和
    }
    sort(num,num+n);//从小到大排序
    long long ans = 0;//最终答案
    long long pair = 0;//前缀和相等的对数
    for(int i = 1; i < n; i++){
        if(num[i] == 0)
            ans++;
        if(num[i] = num[i - 1])//因为排好序，相等的必然是连续的
            pair++;
        if(num[i] != num[i - 1] && pair || i = n - 1 && pair){//一旦不相等了，就处理一次
            ans += (pair + 1) * pair / 2;//比如说有两对相等的，那么就是num[i-1],num[i],num[i+1],每两个之间的和都为0，就是组合数C(pair+1,2)
            pair = 0;//置为0，免得干扰后面的
        }
    }
    printf("%lld\n", ans);
return 0;
}