#include<bits/stdc++.h>
using namespace std;
const long long mod=1000000007;
int n,k;
char c[510];
long long f[510][510][6];
bool can[510][510];
int main()
{
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>c[i];
for(int i=1;i<=n;i++)
{
bool tmp=1;
for(int j=i;(j<=n)&&(j<=i+k-1);j++)
{
if(c[j]!='*'&&c[j]!='?') tmp=0;
can[i][j]=tmp;
}
}
for(int i=1;i<=n;i++) if(can[i][i]) f[i][i][5]=1;
for(int i=1;i<n;i++)
{
if(can[i][i+1]) f[i][i+1][5]++;
if((c[i]=='('||c[i]=='?')&&(c[i+1]==')'||c[i+1]=='?')) f[i][i+1][1]++;
}
for(int l=2;l<n;l++)
for(int i=1;i+l<=n;i++)
{
int j=i+l;
if((c[i]=='('||c[i]=='?')&&(c[j]==')'||c[j]=='?'))
{
f[i][j][1]=(f[i+1][j-1][1]+f[i+1][j-1][2]+f[i+1][j-1][3]+f[i+1][j-1][4])%mod;
if(can[i+1][j-1]) f[i][j][1]=(f[i][j][1]+1)%mod;
}
for(int p=i;p<j;p++)
{
f[i][j][2]=(f[i][j][2]+(f[i][p][1]+f[i][p][2]+f[i][p][3])%mod*f[p+1][j][1]%mod)%mod;
f[i][j][3]=(f[i][j][3]+(f[i][p][1]+f[i][p][2])%mod*can[p+1][j]%mod)%mod;
f[i][j][4]=(f[i][j][4]+(f[i][p][4]+f[i][p][5])%mod*f[p+1][j][1]%mod)%mod;
f[i][j][5]=(f[i][j][5]+f[i][p][4]%mod*can[p+1][j]%mod)%mod;
}
}
cout<<(f[1][n][1]+f[1][n][2])%mod<<endl;
return 0;
}
f1是外面套着括号的合法方法数 f2含并列括号的合法方法数 f3是去掉右边一段星星后合法方法数 f4是去掉左边一段星星后合法方法数 51是去掉左右两端星星后合法方法数