#include <cmath> #include <iostream> #include <vector> using namespace std; using i64 = int64_t; vector<i64> dp; vector<vector<int>> G; vector<int> arr; constexpr int mod = static_cast<int>(powl(10, 9)) + 7; i64 rec(int v, int cur) { i64 &res = dp[v]; if(cur == 3) { return 1; } if(res != -1) { return res; } res = 0; for(int u : G[v]) { if(arr[u] == cur+1) { res += rec(u, cur+1); res %= mod; } } return res; } int main(void) { int n, m; scanf("%d%d", &n, &m); string s; cin >> s; arr.resize(n); for(int i=0; i<n; ++i) { arr[i] = static_cast<int>(string("PDCA").find(s[i])); } G.assign(n, vector<int>()); for(int i=0; i<m; ++i) { int u, v; scanf("%d%d", &u, &v); --u, --v; G[u].push_back(v); G[v].push_back(u); } dp.assign(n, -1); i64 res = 0; for(int i=0; i<n; ++i) { if(arr[i] == 0) { res += rec(i, 0); res %= mod; } } printf("%ld\n", res); return 0; }