#include #include #include using namespace atcoder; using Mint = modint1000000007; int main(){ int N; scanf("%d", &N); int A[N]; for(int i = 0; i < N; ++i) scanf("%d", A + i); int last[26]; memset(last,0,sizeof last); Mint dp_cum[N+1]; Mint dp_max[N+1]; dp_cum[0] = Mint::raw(0); dp_max[0] = Mint::raw(1); scanf("\n"); for (int i = 0; i < N; i++) { char S; scanf("%c", &S); S -= 'a'; dp_max[i+1] = dp_cum[i] - dp_cum[last[S]] + dp_max[last[S]]; dp_cum[i+1] = dp_cum[i] + dp_max[i+1]*Mint::raw(A[i]); last[S] = i+1; } printf("%u\n", dp_cum[N].val()); }