#include <bits/stdc++.h>
using namespace std;
#define int long long int
#define double long double
inline int power(int a, int b) {
int x = 1;
while (b) {
if (b & 1) x *= a;
a *= a;
b >>= 1;
}
return x;
}
const int M = 1000000007;
const int N = 3e5+9;
const int INF = 2e9+1;
const int LINF = 2000000000000000001;
//_ ***************************** START Below *******************************
// In Good Subarrays problem, draw array && subarray and apply Maths and find condition
// L R
// [ _ _ _ _ _ (_ _ _ _ _ _) _ _ ]
//* Count of good subarrays
//* with equal x,y,z,w,b
//* Eg : [x y p z a b p x y z a b]
//* [(x y p z a b) p x y z a b]
//* [x (y p z a b p x) y z a b]
//* [x y p (z a b p x y) z a b]
//* [x y p z (a b p x y z) a b]
//* [x y p z a (b p x y z a) b]
//* [x y p z a b p (x y z a b)]
vector<string> a;
void consistency(int n) {
int x = 0;
int y = 0;
int z = 0;
int w = 0;
int b = 0;
//* {x,y,z,w,b} -> freq
map<vector<int>, int> mp = {{{0,0,0,0}, 1}};
int ans = 0;
for(int i=0; i<n; i++){
if(a[i] == "x") x++;
if(a[i] == "y") y++;
if(a[i] == "z") z++;
if(a[i] == "w") w++;
if(a[i] == "b") b++;
vector<int> diff = {x-y, y-z, z-w, w-b};
if(mp.count(diff)){
ans += mp[diff];
}
mp[diff]++;
}
cout << ans << endl;
}
void solve() {
int n;
cin >> n;
a.resize(n);
for(int i=0; i<n; i++) cin >> a[i];
consistency(n) ;
}
int32_t main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int t = 1;
// cin >> t;
while (t--) {
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50ICAgICAgICAgICAgICBsb25nIGxvbmcgaW50CiNkZWZpbmUgZG91YmxlICAgICAgICAgICBsb25nIGRvdWJsZQppbmxpbmUgaW50IHBvd2VyKGludCBhLCBpbnQgYikgewogICAgaW50IHggPSAxOwogICAgd2hpbGUgKGIpIHsKICAgICAgICBpZiAoYiAmIDEpIHggKj0gYTsKICAgICAgICBhICo9IGE7CiAgICAgICAgYiA+Pj0gMTsKICAgIH0KICAgIHJldHVybiB4Owp9CgoKY29uc3QgaW50IE0gPSAxMDAwMDAwMDA3Owpjb25zdCBpbnQgTiA9IDNlNSs5Owpjb25zdCBpbnQgSU5GID0gMmU5KzE7CmNvbnN0IGludCBMSU5GID0gMjAwMDAwMDAwMDAwMDAwMDAwMTsKCi8vXyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBTVEFSVCBCZWxvdyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgovLyBJbiBHb29kIFN1YmFycmF5cyBwcm9ibGVtLCBkcmF3IGFycmF5ICYmIHN1YmFycmF5IGFuZCBhcHBseSBNYXRocyBhbmQgIGZpbmQgY29uZGl0aW9uCgovLyAgICAgICAgICAgICAgICAgICAgICBMICAgICAgICAgICAgICAgUgovLyAgICBbICBfICBfICBfICBfICBfIChfICBfICBfICBfICBfICAgXykgXyAgXyAgXQoKCi8vKiBDb3VudCBvZiBnb29kIHN1YmFycmF5cyAKLy8qIHdpdGggZXF1YWwgeCx5LHosdyxiCgovLyogRWcgOiBbeCB5IHAgeiBhIGIgcCB4IHkgeiBhIGJdCi8vKiAJIFsoeCB5IHAgeiBhIGIpIHAgeCB5IHogYSBiXQovLyogCSBbeCAoeSBwIHogYSBiIHAgeCkgeSB6IGEgYl0KLy8qIAkgW3ggeSBwICh6IGEgYiBwIHggeSkgeiBhIGJdCi8vKiAJIFt4IHkgcCB6IChhIGIgcCB4IHkgeikgYSBiXQovLyogCSBbeCB5IHAgeiBhIChiIHAgeCB5IHogYSkgYl0KLy8qIAkgW3ggeSBwIHogYSBiIHAgKHggeSB6IGEgYildCgp2ZWN0b3I8c3RyaW5nPiBhOwp2b2lkIGNvbnNpc3RlbmN5KGludCBuKSB7CgkKCWludCB4ID0gMDsKCWludCB5ID0gMDsKCWludCB6ID0gMDsKCWludCB3ID0gMDsKCWludCBiID0gMDsKCQoJLy8qIHt4LHkseix3LGJ9IC0+IGZyZXEKCW1hcDx2ZWN0b3I8aW50PiwgaW50PiBtcCA9IHt7ezAsMCwwLDB9LCAxfX07CglpbnQgYW5zID0gMDsKCWZvcihpbnQgaT0wOyBpPG47IGkrKyl7CgkJaWYoYVtpXSA9PSAieCIpIHgrKzsKCQlpZihhW2ldID09ICJ5IikgeSsrOwoJCWlmKGFbaV0gPT0gInoiKSB6Kys7CgkJaWYoYVtpXSA9PSAidyIpIHcrKzsKCQlpZihhW2ldID09ICJiIikgYisrOwoJCQoJCXZlY3RvcjxpbnQ+IGRpZmYgPSB7eC15LCB5LXosIHotdywgdy1ifTsKCQlpZihtcC5jb3VudChkaWZmKSl7CgkJCWFucyArPSBtcFtkaWZmXTsKCQl9CgkJIG1wW2RpZmZdKys7CgkJCgl9CgkKCWNvdXQgPDwgYW5zIDw8IGVuZGw7Cn0KCnZvaWQgc29sdmUoKSB7CiAgICAKICAgIGludCBuOwogICAgY2luID4+IG47CiAgICBhLnJlc2l6ZShuKTsKICAgIGZvcihpbnQgaT0wOyBpPG47IGkrKykgY2luID4+IGFbaV07CiAgICBjb25zaXN0ZW5jeShuKSA7Cgp9CgoKCgoKaW50MzJfdCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CgogICAgaW50IHQgPSAxOwogICAgLy8gY2luID4+IHQ7CiAgICB3aGlsZSAodC0tKSB7CiAgICAgICAgc29sdmUoKTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQ==