#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; const ll mod = 1000000007; #define rep(i,n) for(int i=0;i=0;i--) #define all(x) (x).begin(),(x).end() int main() { int N, M; cin >> N >> M; string s; cin >> s; map next { {'P', 'D'} , {'D', 'C'} , { 'C', 'A'} , { 'A', 'X'} }; vector> edges(N, vector()); rep(i, M) { int u, v; cin >> u >> v; --u; --v; if (next[s[u]] == s[v]) edges[u].push_back(v); if (next[s[v]] == s[u]) edges[v].push_back(u); } ll count = 0; rep(i, N) { if (s[i] != 'P') continue; for (auto d : edges[i]) { for (auto c : edges[d]) { count += edges[c].size(); count %= mod; } } } cout << count << endl; return 0; }