#include <bits/stdc++.h>
const int mod = (int)1e09 + 7;
int in(void) {
  int i;
  scanf("%d", &i);
  return i;
}
long long llin(void) {
  long long i;
  scanf("%lld", &i);
  return i;
}
double din(void) {
  double i;
  scanf("%lf", &i);
  return i;
}
void chin(char s[]) { scanf("%s", s); }
void print(int a) { printf("%d\n", a); }
void llprint(long long a) { printf("%lld\n", a); }
void dprint(double a) { printf("%.10f\n", a); }
void print2(int a, int b) { printf("%d %d\n", a, b); }
int Max(int a, int b) {
  if (a > b) {
    return a;
  }
  return b;
}
int Min(int a, int b) {
  if (a < b) {
    return a;
  }
  return b;
}
long long llmax(long long a, long long b) { return a > b ? a : b; }
long long llmin(long long a, long long b) { return a < b ? a : b; }
double dmax(double a, double b) { return a > b ? a : b; }
double dmin(double a, double b) { return a < b ? a : b; }
int cmp(const void *a, const void *b) {
  return *(long long *)a - *(long long *)b;
}
int cmp_r(const void *a, const void *b) {
  return *(long long *)b - *(long long *)a;
}
int char_cmp(const void *a, const void *b) {
  return strcmp((char *)a, (char *)b);
}
int char_cmp_r(const void *a, const void *b) {
  return strcmp((char *)b, (char *)a);
}
void swap(int *a, int *b) {
  int t = *a;
  *a = *b;
  *b = t;
}
int main() {
  long long N;
  long long A;
  scanf("%lld", &N);
  long long *sum = (long long *)malloc(sizeof(long long) * N + 1);
  long long x = 0;
  sum[0] = x;
  for (int i = 1; i < N + 1; i++) {
    scanf("%lld", &A);
    sum[i] = x + A;
    x += A;
  }
  qsort(sum, N + 1, sizeof(long long), cmp);
  long long tmp = 0;
  long long cnt1 = 0;
  long long cnt2 = 0;
  long long ff = sum[0];
  for (int i = 1; i < N + 1; i++) {
    if (ff == sum[i]) {
      cnt1++;
      cnt2 += cnt1;
    } else {
      cnt1 = 0;
      ff = sum[i];
    }
  }
  long long ans = 0;
  ans = cnt2;
  printf("%lld\n", ans);
  return 0;
}
