#include <bits/stdc++.h>
using namespace std;
int toNumber(string s) {
  int Number;
  if (!(istringstream(s) >> Number)) Number = 0;
  return Number;
}
string toString(int number) {
  ostringstream ostr;
  ostr << number;
  return ostr.str();
}
long long ele(long long a, long long b) {
  if (b == 0) return 1;
  if (b % 2 == 0) {
    return ele((a * a), b / 2);
  } else {
    return a * ele((a * a), b / 2);
  }
}
long long mcd(long long a, long long b) {
  if (a == 0) return b;
  return mcd(b % a, a);
}
double d_abs(long a, long b) {
  if (a > b) {
    return a - b;
  }
  return b - a;
}
struct frac {
  long long a, b;
};
frac minTiempo(frac x, long long a, long long b) {
  if (x.a * b > x.b * a) {
    return x;
  } else {
    frac f;
    f.a = a;
    f.b = b;
    return f;
  }
}
int caso = 0;
void solve() {
  int n;
  cin >> n;
  vector<long long> v(n);
  vector<long long> par(n + 1, 0);
  map<int, long long> pos;
  for (int i = 0; i < (int)(n); i++) {
    cin >> v[i];
    par[i + 1] = par[i] + v[i];
    pos[par[i + 1]]++;
  }
  long long tot = 0;
  for (map<int, long long>::iterator it = pos.begin(); it != pos.end(); it++) {
    long long cant = it->second;
    tot += (cant * (cant - 1)) / 2;
  }
  tot += pos[0];
  cout << tot << endl;
}
int main() {
  int T;
  T = 1;
  while (T--) {
    caso++;
    solve();
  }
}
