//TLE(?) #include #include #define rep(i, l, n) for (int i = (l); i < (n); i++) using namespace std; using namespace atcoder; using ll = long long; template using V = vector; const ll mod = 1000000007; int main(void) { int N, K; cin >> N >> K; V a(N); rep(i, 0, N) { cin >> a[i]; } string s; cin >> s; V > up(N, V({})); V > down(N, V({})); rep(i, 0, N) { rep(j, 0, i) { if (a[j] > a[i]) { up[i].push_back(j); } if (a[j] < a[i]) { down[i].push_back(j); } } } V dp(N, 1); rep(i, 0, K) { V ndp(N); rep(j, 0, N) { if (s[i] == '<') { for (int k : down[j]) { ndp[j] += dp[k]; ndp[j] %= mod; } } else { for (int k : up[j]) { ndp[j] += dp[k]; ndp[j] %= mod; } } } dp = ndp; } ll ans = 0; for (ll t : dp) { ans += t; ans %= mod; } cout << ans << endl; return 0; }