#include <algorithm>
#include <cstdio>
#define MOD 1000000007
#define C(n, m) (fact[n] * inv[m] % MOD * inv[(n) - (m)] % MOD)
typedef long long ll; 
inline ll quick_pow(ll a, int n)
{
	ll res = 1; 
	while (n)
	{
		if (n & 1)
			res = res * a % MOD; 
		a = a * a % MOD; 
		n >>= 1; 
	}
	return res; 
}
int seq[75], n, k;
char str[75]; 
ll ans, fact[305], inv[305]; 
inline void work(int len, int sum)
{
	int one = 0, two = 0, need = 0, rem = 0; 
	for (int i = 0; i < k; i++)
	{
		if (str[i] == 'r' && one < len)
			need += seq[one++] != 1; 
		else if (str[i] == 'b' && need)
		{
			need--; 
			rem += seq[two++] - 2; 
		}
		else
			rem -= !!rem; 
	}
	if (one < len || need || rem)
		return; 
	ll res = fact[len], cnt = len + 1; 
	for (int i = 0, j = 0; i < len; i = j)
	{
		while (j < len && seq[i] == seq[j])
			j++; 
		res = res * inv[j - i] % MOD; 
		cnt += (j - i) * (seq[i] * 2 - 1); 
	}
	(ans += res * C(n - sum + cnt - 1, cnt - 1)) %= MOD; 
}
void dfs(int mx, int len, int cur)
{
	if (cur > n)
		return; 
	work(len, cur); 
	for (int i = mx; i; i--)
	{
		seq[len] = i; 
		dfs(i, len + 1, cur + std::max(i * 2 - 3, 1) + !!len); 
	}
}
int main()
{
	// freopen("ARC089-F.in", "r", stdin); 
	fact[0] = inv[0] = 1; 
	for (int i = 1; i < 305; i++)
	{
		fact[i] = fact[i - 1] * i % MOD; 
		inv[i] = quick_pow(fact[i], MOD - 2); 
	}
	scanf("%d%d%s", &n, &k, str);
	dfs(70, 0, 0); 
	printf("%lld\n", ans);
	return 0; 
}
