#include<stdio.h>

  void QSort(long x[ ], int left, int right)
{
    int i, j;
    int pivot;

    i = left;                      /* ソートする配列の一番小さい要素の添字 */
    j = right;                     /* ソートする配列の一番大きい要素の添字 */

    pivot = x[(left + right) / 2]; /* 基準値を配列の中央付近にとる */

    while (1) {                    /* 無限ループ */

        while (x[i] < pivot)       /* pivot より大きい値が */
            i++;                   /* 出るまで i を増加させる */

        while (pivot < x[j])       /* pivot より小さい値が */
            j--;                   /*  出るまで j を減少させる */
        if (i >= j)                /* i >= j なら */
            break;                 /* 無限ループから抜ける */

        Swap(x, i, j);             /* x[i] と x[j]を交換 */
        i++;                       /* 次のデータ */
        j--;
    }
    if (left < i - 1)              /* 基準値の左に 2 以上要素があれば */
        QSort(x, left, i - 1);     /* 左の配列を Q ソートする */
    if (j + 1 <  right)            /* 基準値の右に 2 以上要素があれば */
        QSort(x, j + 1, right);    /* 右の配列を Q ソートする */
}

  /* 配列の要素を交換する */
void Swap(long x[ ], int i, int j)
{
    int temp;

    temp = x[i];
    x[i] = x[j];
    x[j] = temp;
}

int main(){
  int n,i,cnt=0,sum=0,j;
  long a,s[200001];
  scanf("%d",&n);
  s[0]=0;
  for(i=0;i<n;i++){
    scanf("%ld",&a);
    s[i+1]=s[i]+a;
    if(s[i+1]==0) sum++;
  }
  QSort(s, 1, n);
  for(i=1;i<n;i++){
    cnt=0;

    for(j=i+1;j<n+1;j++){
      if(s[i]==s[j]) cnt++;
      else break;
    }
    i+=cnt;
    sum+=cnt*(cnt+1)/2;

  }
  printf("%d\n",sum);
}