void prec() { ll i,j,k,l; for(i=1; i<INT_MAX; i*=2) for( j=i; j<INT_MAX; j*=3) for( k=j; k<INT_MAX; k*=5) for( l=k; l<INT_MAX; l*=7) num.pb(l); sort(all(num)); }
int main() { LL i,n,ans,k; while(cin>>k>>str) { cnt.pb(0); for(i=0; i<str.size(); i++) { if(str[i]=='1') cnt.pb(i+1); } cnt.pb(str.size()+1); if(k>cnt.size()-2) { pr1(0); continue; } ans=0; if(k==0) { for(i=1;i<cnt.size();i++) { n=cnt[i]-cnt[i-1]-1; ans+=n*(n+1)/2; } } else { for(i=1; i<cnt.size()-k; i++) { ans+=(cnt[i]-cnt[i-1])*(cnt[i+k]-cnt[i+k-1]); } } pr1(ans); } return 0; }
void gen(void) { LL i,j,k; for(i=1;i<=1005;i++) arr[i]=i*i*i; for(i=1; i<=1005; i++) { for(j=i+1; j<=1005; j++) { k=arr[i]+arr[j]; mp[k]++; if(mp[k]==2) cont.pb(k); } } sort(cont.begin(),cont.end()); return; }
inline void sieve() { iota( all(squeeze), 0 ); mrk[0] = mrk[1] = false; for(int i = 2; i < ms; ++i) { if(mrk[i]) { primes.pb(i); for(int j = i + i; j < ms; j += i) { squeeze[j] = min(squeeze[j], i); mrk[j] = false; } } } }