#include #include #include using namespace std; string S; vector> roads; long dp[100010][3]; long move(int now, int PDCA){ if(PDCA == 3){ return 1; }else if(dp[now][PDCA] != -1){ return dp[now][PDCA]; } long ans = 0; for(int i: roads[now]){ if(S[i] == "PDCA"[PDCA + 1]){ ans += move(i, PDCA + 1); } } return dp[now][PDCA] = ans % long(1e9 + 7); } int main(){ int N, M; cin >> N >> M >> S; roads.resize(N); for(int i = 0; i < M; i++){ int u, v; cin >> u >> v; roads[u - 1].push_back(v - 1); roads[v - 1].push_back(u - 1); } memset(dp, -1, sizeof(dp)); long ans = 0; for(int i = 0; i < N; i++){ if(S[i] == 'P'){ ans += move(i, 0); } } cout << ans % long(1e9 + 7) << endl; }