#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;

#define int long long

#define left __left__

const int N=70+10;

const int A=520;

const int MOD=1000000007;

int n,k;

char s[N];

int C[A][A];

void prework()
{
	int i,j;
	for(i=0;i<A;++i)
	{
		C[i][0]=1;
		for(j=1;j<=i;++j)
			if((C[i][j]=C[i-1][j-1]+C[i-1][j])>=MOD)
				C[i][j]-=MOD;
	}
}

int ans;

int B[N],ed,left;

bool valid()
{
	if(!ed)
		return false;
	int i,j=1,jj=1,c=0;
	for(i=1;i<=k&&(j<=ed||B[jj]>1||c);++i)
	{
		if(j<=ed&&s[i]=='r')
			++j;
		else if(jj<j&&B[jj]>1&&s[i]=='b')
			c+=B[jj++]-2;
		else if(c)
			--c;
	}
	return !(j<=ed||B[jj]>1||c);
}

void update()
{
	int i,j,res(1),em(0);
	for(i=1;i<=ed;i=j+1)
	{
		for(j=i;B[j+1]==B[i];++j);
		res=res*C[j][i-1]%MOD;
		em+=(j-i+1)*((B[i]<<1)-1);
	}
	em+=ed+1;
	res=res*C[em-1+left][em-1]%MOD;
	if((ans+=res)>=MOD)
		ans-=MOD;
}

void dfs(int lim)
{
	if(left<0)
		return;
	if(valid())
		update();
	if(ed)
		--left;
	++ed;--left;
	dfs(B[ed]=1);
	++left;
	for(int i=2;i<=lim;++i)
	{
		left-=(i<<1)-3;
		dfs(B[ed]=i);
		left+=(i<<1)-3;
	}
	B[ed--]=0;
	if(ed)
		++left;
}

signed main()
{
	scanf("%lld%lld%s",&n,&k,s+1);
	prework();
	left=n;dfs(233);
	printf("%lld",(ans+1)%MOD);
	return 0;
}
