#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#include <bits/stdc++.h>
#define int long long
#define fi first
#define se second
#define pb push_back
#define eb emplace_back
#define endl "\n"
#define VI vector<int>
#define PII pair<int,int>
#define Gheap priority_queue<int,vector<int>,greater<int>>
#define Lheap priority_queue<int>
#define MAXN 0x3f3f3f3f
#define MINN -0x3f3f3f3f
using namespace std;
const int N=2e5+100;
int a[N];
vector<int> b;
int hz[N];
int qz[N];
void solve()
{
int n;
cin>>n;
string s;
cin>>s;s=' '+s;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<n;i++)
{
if(s[i]==s[i+1])
{
b.eb(i);
}
}
for(int i=1;i<=n;i++) qz[i]=qz[i-1]+a[i];
for(int i=n;i>=1;i--) hz[i]=hz[i+1]+a[i];
int qzs=0,qzd=0,hzs=0,hzd=0;
vector<int> c(b.size());
for(int i=0;i<b.size();i++)
{
if(i%2==0)
{
qzs+=qz[b[i]]-(qzd+qzs);
c[i]+=qzd;
}
else
{
qzd+=qz[b[i]]-(qzd+qzs);
c[i]+=qzs;
}
}
for(int i=b.size()-1;i>=0;i--)
{
if((b.size()-i)%2==0)
{
hzs+=hz[b[i]+1]-(hzs+hzd);
c[i]+=hzd;
}
else
{
hzd+=hz[b[i]+1]-(hzs+hzd);
c[i]+=hzs;
}
}
int ans=1e18;
for(auto z:c) ans=min(ans,z);
if(b.size()) cout<<ans<<endl;
else cout<<0<<endl;
}
signed main()
{
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t=1;
while(t--) solve();
}