#include #include #include using namespace atcoder; using mint = modint1000000007; using namespace std; #define rep(i,n) for(int i=0;i<(n);i++) #define Inf 1000000001 int main(){ int n; cin>>n; vector a(n); rep(i,n)cin>>a[i]; string s; cin>>s; vector nxt(n+1,vector(26,Inf)); vector cur(26,Inf); for(int i=n-1;i>=0;i--){ nxt[i] = cur; cur[s[i]-'a'] = i; } vector dp(n+1,0); set S; rep(i,n){ if(!S.count(s[i]))dp[i] = 1; S.insert(s[i]); } mint ans = 0; rep(i,n){ ans += dp[i] * (a[i]); rep(j,26){ if(nxt[i][j]==Inf)continue; if(j==s[i]-'a'){ dp[nxt[i][j]] += dp[i]; } else{ dp[nxt[i][j]] += dp[i] * a[i]; } } } cout<