MOD = 10**9 + 7 n, m = map(int, input().split()) s = input().strip() edges = [] adj = [[] for _ in range(n + 1)] for _ in range(m): u, v = map(int, input().split()) edges.append((u, v)) adj[u].append(v) adj[v].append(u) count_p = [0] * (n + 1) count_d = [0] * (n + 1) count_c = [0] * (n + 1) count_a = [0] * (n + 1) for u in range(1, n + 1): for v in adj[u]: c = s[v - 1] if c == 'P': count_p[u] += 1 elif c == 'D': count_d[u] += 1 elif c == 'C': count_c[u] += 1 elif c == 'A': count_a[u] += 1 total = 0 for u, v in edges: su = s[u - 1] sv = s[v - 1] if su == 'D' and sv == 'C': contrib = count_p[u] * count_a[v] total = (total + contrib) % MOD elif su == 'C' and sv == 'D': contrib = count_p[v] * count_a[u] total = (total + contrib) % MOD print(total % MOD)