#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e6+5;
vector<pair<ll,ll>> inter;
ll niz[maxn],n,pref[maxn];
map<ll,ll> poc,kraj,kol;
multiset<ll> S;
int main(){
   ios_base::sync_with_stdio(false);
   cin.tie(0);
   cin>>n;
   for(int i=1;i<=n;i++)
      cin>>niz[i];
   for(int i=1;i<=n;i++)
     pref[i]=pref[i-1]+niz[i];
   for(int i=1;i<=n;i++){
      kraj[pref[i]]=i;
      if(poc.find(pref[i])==poc.end())
         poc[pref[i]]=i+1;
   }
   poc[0]=1;
   for(int i=1;i<=n;i++)
      inter.push_back({poc[pref[i]],kraj[pref[i]]});
   sort(inter.begin(),inter.end());
   ll maxr=inter[0].second;
   for(int i=0;i<inter.size();i++){
      maxr=max(maxr,inter[i].second);
      inter[i].second=maxr;
   }
   ll l=0,r=0;
   kol[0]=1;
   S.insert(1);
   for(int i=1;i<=n;i++)
      S.insert(0);
   ll res=1;
   for(int i=0;i<inter.size();i++){
      while(r<inter[i].second){
         r++;
         ll br=niz[r];
         S.erase(S.find(kol[br]));
         kol[br]++;
         S.insert(kol[br]);
      }
      while(l<inter[i].first){
         l++;
         ll br=niz[l-1];
         S.erase(S.find(kol[br]));
         kol[br]--;
         S.insert(kol[br]);
      }
      res=max(res,*S.rbegin());
   }
   cout<<res<<"\n";
}
