#include <bits/stdc++.h>
using namespace std;
#define read(type) readInt<type>() // Fast read
#define ll long long
#define nL "\n"
#define pb push_back
#define mk make_pair
#define pii pair<int, int>
#define a first
#define b second
#define vi vector<int>
#define all(x) (x).begin(), (x).end()
#define umap unordered_map
#define uset unordered_set
#define MOD 1000000007
#define imax INT_MAX
#define imin INT_MIN
#define exp 1e9
#define sz(x) (int((x).size()))
void solve() {
int n; cin >> n;
int ht = 0; int gt = 0;
vector<char> HG(n); for(auto i = 0; i < n; i++) {
char d; cin >> d;
if (d == 'H') {ht++;}
else {gt++;}
HG[i] = d;
}
set<int> H; set<int> G;
for(auto i = 0; i < n; i++) {
int x; cin >> x;
int hc = 0; int gc = 0;
if (HG[i] == 'H') {
cout << "Processing H" << endl;
vector<int> gPos;
for(auto j = i; j < x; j++) {
if (HG[j] == 'H') {hc++;}
else {gPos.pb(j); gc++;}
}
cout << "H count: " << hc << endl;
cout << "gPos size: " << (int)gPos.size() << endl;
if (hc==ht) {H.insert(i);}
if ((int)gPos.size() > 0) {
for(auto v : gPos) {G.insert(v);}
H.insert(i);
}
if (hc!=ht && (int)gPos.size() == 0) {H.erase(i);}
} else {
cout << "Processing G" << endl;
vector<int> hPos;
for(auto j = i; j < x; j++) {
if (HG[j] == 'G') {gc++;}
else {hPos.pb(j); hc++;}
}
cout << "G count: " << gc << endl;
cout << "hPos size: " << (int)hPos.size() << endl;
if (gc==gt) {G.insert(i);}
if ((int)hPos.size() > 0) {
for(auto v : hPos) {H.insert(v);}
G.insert(i);
}
if(gc!=gt && (int)hPos.size() == 0) {G.erase(i);}
}
}
cout << "H size " << (int)H.size() << endl;
cout << "G size " << (int)G.size() << endl;
cout << (int)H.size()*(int)G.size() << endl;
}
int32_t main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
solve();
return 0;
}