#include using namespace std; #define rep(i, n) for (int i = 0; i < (n); ++i) using ll = long long; using ull = unsigned long long; #include using mint = atcoder::modint1000000007; int main() { cin.tie(nullptr)->sync_with_stdio(false); int n, m; string s; cin >> n >> m >> s; vector> e(m); rep(i, m) { int u, v; cin >> u >> v; --u, --v; e[i] = { u, v }; } vector dp(n, 0); rep(i, n) if (s[i] == 'P') dp[i] = 1; rep(j, 3) { vector ndp(n, 0); for (auto [u, v] : e) { rep(_, 2) { if (s[u] == "PDCA"[j] && s[v] == "PDCA"[j + 1]) ndp[v] += dp[u]; swap(u, v); } } swap(dp, ndp); } mint ans = 0; rep(i, n) if (s[i] == 'A') ans += dp[i]; cout << ans.val() << '\n'; return 0; }