#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
using ordered_set = tree<
pair<int, int>,
null_type,
less<pair<int, int>>,
rb_tree_tag,
tree_order_statistics_node_update
>;
int main() {
int n;
string s;
cin >> n >> s;
ordered_set X;
X.insert({0, 0});
int prefix = 0;
long long ans = 0;
for (int j = 0; j < n; j++) {
prefix += (s[j] == '1' ? 1 : -1);
ans += X.order_of_key({prefix, 0});
X.insert({prefix, j + 1});
}
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsKCnVzaW5nIG9yZGVyZWRfc2V0ID0gdHJlZTwKICAgIHBhaXI8aW50LCBpbnQ+LAogICAgbnVsbF90eXBlLAogICAgbGVzczxwYWlyPGludCwgaW50Pj4sCiAgICByYl90cmVlX3RhZywKICAgIHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZQo+OwoKaW50IG1haW4oKSB7CiAgICBpbnQgbjsKICAgIHN0cmluZyBzOwogICAgY2luID4+IG4gPj4gczsKCiAgICBvcmRlcmVkX3NldCBYOwoKICAgIFguaW5zZXJ0KHswLCAwfSk7CgogICAgaW50IHByZWZpeCA9IDA7CiAgICBsb25nIGxvbmcgYW5zID0gMDsKCiAgICBmb3IgKGludCBqID0gMDsgaiA8IG47IGorKykgewogICAgICAgIHByZWZpeCArPSAoc1tqXSA9PSAnMScgPyAxIDogLTEpOwoKICAgICAgICBhbnMgKz0gWC5vcmRlcl9vZl9rZXkoe3ByZWZpeCwgMH0pOwoKICAgICAgICBYLmluc2VydCh7cHJlZml4LCBqICsgMX0pOwogICAgfQoKICAgIGNvdXQgPDwgYW5zIDw8ICdcbic7Cn0=