#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define PhTrNghia "SLUCKY"
using namespace std;
const int maxn = 2e5 + 5;
const int inf = 1e18;
struct fenwick_tree{
int n;
vector <int> tree;
fenwick_tree(int _n){
n = _n;
tree.assign(n + 5, 0);
}
void update(int pos, int val){
for (; pos <= n; pos += -pos&pos) tree[pos] += val;
}
int get(int pos){
int res = 0;
for (; pos; pos -= -pos&pos) res += tree[pos];
return res;
}
int get(int l, int r){
if (l > r) return 0;
return get(r) - get(l - 1);
}
};
struct segtree{
int n;
vector <int> tree;
segtree (int _n){
n = _n;
tree.assign(n << 2 | 3, 0);
}
void update(int id, int l, int r, int pos, int val){
if (r < pos or l > pos) return;
if (l == r){
tree[id] = val;
return;
}
int mid = (l + r) >> 1;
update(id << 1, l, mid, pos, val);
update(id << 1 | 1, mid + 1, r, pos, val);
tree[id] = max(tree[id << 1], tree[id << 1 | 1]);
}
int get(int id, int l, int r, int u, int v){
if (l > v or r < u) return -inf;
if (l >= u && r <= v) return tree[id];
int mid = (l + r) >> 1;
int get1 = get(id << 1, l, mid, u, v);
int get2 = get(id << 1 | 1, mid + 1, r, u, v);
return max(get1, get2);
}
void update(int pos, int val){
update(1, 1, n, pos, val);
}
int get(int l, int r){
return get(1, 1, n, l, r);
}
};
stack <int> st;
int n, ans = 0;
string s;
vector <pair <int, int>> layer[maxn];
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
if (fopen(PhTrNghia".INP", "r")){
freopen(PhTrNghia".INP", "r", stdin);
freopen(PhTrNghia".OUT", "w", stdout);
}
cin >> n >> s;
s = "$" + s;
segtree smt(n);
int mx_layer = -inf;
for (int i = 1; i <= n; i++){
if (!st.empty() && s[i] == '8' && s[st.top()] == '6'){
int mx = smt.get(st.top(), i);
smt.update(st.top(), mx+1);
layer[mx+1].push_back({st.top(), i});
mx_layer = max(mx_layer, mx+1);
st.pop();
continue;
}
st.push(i);
}
fenwick_tree bit(n);
for (int i = 1; i <= mx_layer; i++){
for (pair <int, int> cur: layer[i]){
int l = cur.first;
int r = cur.second;
int cnt = bit.get(l-1);
ans += (l - (cnt << 1));
}
for (pair <int, int> cur: layer[i]){
int l = cur.first;
bit.update(l, 1);
}
}
cout << ans;
return 0;
}
/*
*/
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIGVuZGwgJ1xuJwojZGVmaW5lIFBoVHJOZ2hpYSAiU0xVQ0tZIgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBtYXhuID0gMmU1ICsgNTsKY29uc3QgaW50IGluZiA9IDFlMTg7CgpzdHJ1Y3QgZmVud2lja190cmVlewogICAgaW50IG47CiAgICB2ZWN0b3IgPGludD4gdHJlZTsKICAgIGZlbndpY2tfdHJlZShpbnQgX24pewogICAgICAgIG4gPSBfbjsKICAgICAgICB0cmVlLmFzc2lnbihuICsgNSwgMCk7CiAgICB9CiAgICAKICAgIHZvaWQgdXBkYXRlKGludCBwb3MsIGludCB2YWwpewogICAgICAgIGZvciAoOyBwb3MgPD0gbjsgcG9zICs9IC1wb3MmcG9zKSB0cmVlW3Bvc10gKz0gdmFsOwogICAgfQogICAgCiAgICBpbnQgZ2V0KGludCBwb3MpewogICAgICAgIGludCByZXMgPSAwOwogICAgICAgIGZvciAoOyBwb3M7IHBvcyAtPSAtcG9zJnBvcykgcmVzICs9IHRyZWVbcG9zXTsKICAgICAgICByZXR1cm4gcmVzOwogICAgfQogICAgCiAgICBpbnQgZ2V0KGludCBsLCBpbnQgcil7CiAgICAgICAgaWYgKGwgPiByKSByZXR1cm4gMDsKICAgICAgICByZXR1cm4gZ2V0KHIpIC0gZ2V0KGwgLSAxKTsKICAgIH0KfTsKCnN0cnVjdCBzZWd0cmVlewogICAgaW50IG47CiAgICB2ZWN0b3IgPGludD4gdHJlZTsKICAgIHNlZ3RyZWUgKGludCBfbil7CiAgICAgICAgbiA9IF9uOwogICAgICAgIHRyZWUuYXNzaWduKG4gPDwgMiB8IDMsIDApOwogICAgfQogICAgdm9pZCB1cGRhdGUoaW50IGlkLCBpbnQgbCwgaW50IHIsIGludCBwb3MsIGludCB2YWwpewogICAgICAgIGlmIChyIDwgcG9zIG9yIGwgPiBwb3MpIHJldHVybjsKICAgICAgICBpZiAobCA9PSByKXsKICAgICAgICAgICAgdHJlZVtpZF0gPSB2YWw7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaW50IG1pZCA9IChsICsgcikgPj4gMTsKICAgICAgICB1cGRhdGUoaWQgPDwgMSwgbCwgbWlkLCBwb3MsIHZhbCk7CiAgICAgICAgdXBkYXRlKGlkIDw8IDEgfCAxLCBtaWQgKyAxLCByLCBwb3MsIHZhbCk7CiAgICAgICAgdHJlZVtpZF0gPSBtYXgodHJlZVtpZCA8PCAxXSwgdHJlZVtpZCA8PCAxIHwgMV0pOwogICAgfQogCiAgICBpbnQgZ2V0KGludCBpZCwgaW50IGwsIGludCByLCBpbnQgdSwgaW50IHYpewogICAgICAgIGlmIChsID4gdiBvciByIDwgdSkgcmV0dXJuIC1pbmY7CiAgICAgICAgaWYgKGwgPj0gdSAmJiByIDw9IHYpIHJldHVybiB0cmVlW2lkXTsKICAgICAgICBpbnQgbWlkID0gKGwgKyByKSA+PiAxOwogICAgICAgIGludCBnZXQxID0gZ2V0KGlkIDw8IDEsIGwsIG1pZCwgdSwgdik7CiAgICAgICAgaW50IGdldDIgPSBnZXQoaWQgPDwgMSB8IDEsIG1pZCArIDEsIHIsIHUsIHYpOwogICAgICAgIHJldHVybiBtYXgoZ2V0MSwgZ2V0Mik7CiAgICB9ICAgCiAgICAKICAgIHZvaWQgdXBkYXRlKGludCBwb3MsIGludCB2YWwpewogICAgICAgIHVwZGF0ZSgxLCAxLCBuLCBwb3MsIHZhbCk7CiAgICB9CiAgICAKICAgIGludCBnZXQoaW50IGwsIGludCByKXsKICAgICAgICByZXR1cm4gZ2V0KDEsIDEsIG4sIGwsIHIpOwogICAgfQp9OwoKc3RhY2sgPGludD4gc3Q7CmludCBuLCBhbnMgPSAwOwpzdHJpbmcgczsKdmVjdG9yIDxwYWlyIDxpbnQsIGludD4+IGxheWVyW21heG5dOwoKc2lnbmVkIG1haW4oKXsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICBpZiAoZm9wZW4oUGhUck5naGlhIi5JTlAiLCAiciIpKXsKICAgICAgICBmcmVvcGVuKFBoVHJOZ2hpYSIuSU5QIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbihQaFRyTmdoaWEiLk9VVCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KICAgIGNpbiA+PiBuID4+IHM7CiAgICBzID0gIiQiICsgczsKICAgIAogICAgc2VndHJlZSBzbXQobik7CiAgICBpbnQgbXhfbGF5ZXIgPSAtaW5mOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKXsKICAgICAgICBpZiAoIXN0LmVtcHR5KCkgJiYgc1tpXSA9PSAnOCcgJiYgc1tzdC50b3AoKV0gPT0gJzYnKXsKICAgICAgICAgICAgaW50IG14ID0gc210LmdldChzdC50b3AoKSwgaSk7CiAgICAgICAgICAgIHNtdC51cGRhdGUoc3QudG9wKCksIG14KzEpOwogICAgICAgICAgICBsYXllcltteCsxXS5wdXNoX2JhY2soe3N0LnRvcCgpLCBpfSk7CiAgICAgICAgICAgIG14X2xheWVyID0gbWF4KG14X2xheWVyLCBteCsxKTsKICAgICAgICAgICAgc3QucG9wKCk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBzdC5wdXNoKGkpOwogICAgfQogICAgCiAgICBmZW53aWNrX3RyZWUgYml0KG4pOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbXhfbGF5ZXI7IGkrKyl7CiAgICAgICAgZm9yIChwYWlyIDxpbnQsIGludD4gY3VyOiBsYXllcltpXSl7CiAgICAgICAgICAgIGludCBsID0gY3VyLmZpcnN0OwogICAgICAgICAgICBpbnQgciA9IGN1ci5zZWNvbmQ7CiAgICAgICAgICAgIGludCBjbnQgPSBiaXQuZ2V0KGwtMSk7CiAgICAgICAgICAgIGFucyArPSAobCAtIChjbnQgPDwgMSkpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBmb3IgKHBhaXIgPGludCwgaW50PiBjdXI6IGxheWVyW2ldKXsKICAgICAgICAgICAgaW50IGwgPSBjdXIuZmlyc3Q7CiAgICAgICAgICAgIGJpdC51cGRhdGUobCwgMSk7CiAgICAgICAgfQogICAgfQogICAgY291dCA8PCBhbnM7CiAgICByZXR1cm4gMDsKfQovKgoKKi8K