from collections.abc import Iterable from enum import IntEnum, auto from functools import cache class E(IntEnum): S = 0 Y0 = auto() Y_Q = auto() U0 = auto() U_Q = auto() U1 = auto() K0 = auto() K_Q = auto() K1 = auto() I0 = auto() I_Q = auto() I1 = auto() C0 = auto() C_Q = auto() C1 = auto() O0 = auto() O_Q = auto() O1 = auto() D0 = auto() D_Q = auto() D1 = auto() E0 = auto() E_Q = auto() E1 = auto() R0 = auto() R_Q = auto() R1 = auto() def nexts(self): match self: case E.S: return [E.Y0, E.Y_Q] case E.Y0: return [E.U0, E.U_Q] case E.Y_Q: return [E.U1] case E.U0: return [E.K0, E.K_Q] case E.U_Q: return [E.K1] case E.U1: return [E.K1] case E.K0: return [E.I0, E.I_Q] case E.K_Q: return [E.I1] case E.K1: return [E.I1] case E.I0: return [E.C0, E.C_Q] case E.I_Q: return [E.C1] case E.I1: return [E.C1] case E.C0: return [E.O0, E.O_Q] case E.C_Q: return [E.O1] case E.C1: return [E.O1] case E.O0: return [E.D0, E.D_Q] case E.O_Q: return [E.D1] case E.O1: return [E.D1] case E.D0: return [E.E0, E.E_Q] case E.D_Q: return [E.E1] case E.D1: return [E.E1] case E.E0: return [E.R0, E.R_Q] case E.E_Q: return [E.R1] case E.E1: return [E.R1] case E.R0: return [] case E.R_Q: return [] case E.R1: return [] assert False @staticmethod @cache def states(): res = [] for fm in E: for to in fm.nexts(): res.append((fm, to)) return res def state_dp(xs: Iterable, op, e, init: dict, *, is_reset=True): dp = [e] * len(E) for k, v in init.items(): dp[k] = v for x in xs: pp = [e] * len(E) if is_reset else dp.copy() dp, pp = pp, dp for fm, to in E.states(): if not is_valid(to, pp[fm], x): continue dp[to] = op(to, dp[to], fm, pp[fm], x) return dp def is_valid(to: E, fm_v, v) -> bool: match to: case E.Y_Q | E.U_Q | E.K_Q | E.I_Q | E.C_Q | E.O_Q | E.D_Q | E.E_Q | E.R_Q: return v == '?' case E.Y0: return v == 'y' case E.U0 | E.U1: return v == 'u' case E.K0 | E.K1: return v == 'k' case E.I0 | E.I1: return v == 'i' case E.C0 | E.C1: return v == 'c' case E.O0 | E.O1: return v == 'o' case E.D0 | E.D1: return v == 'd' case E.E0 | E.E1: return v == 'e' case E.R0 | E.R1: return v == 'r' return True def op(to: E, to_v, fm: E, fm_v, v): return (to_v + fm_v) % MOD MOD = 10**9 + 7 N = int(input()) S = input() dp = state_dp(S, op, 0, {E.S: 1}, is_reset=False) ans = sum(dp[x] for x in [E.R0, E.R1, E.R_Q]) % MOD print(ans)