#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define fr first
#define sc second
#define endl '\n'
using namespace std;
#define mid ((left+right)>>1)
const int mod=1e9+7;
int sum(int x,int y){
if(x+y<mod)return x+y;
return x+y-mod;
}
int sub(int x,int y){
if(x-y<0)return x-y+mod;
return x-y;
}
int mul(ll x,ll y){
return x*y%mod;
}
int fpow(int x,int y=mod-2){
int res=1;
while(y>0){
if(y&1)res=mul(res,x);
x=mul(x,x);
y>>=1;
}
return res;
}
int n;
int arr[323];
int dp[323][323][2];
int pref[323][323][323],suf[323][323][323];
int prefi[323][323][323],sufi[323][323][323];
int ans=0;
signed main(){
ios_base::sync_with_stdio(23^23);cin.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
char c;cin>>c;
if(c=='(')arr[i]=1;
else if(c==')')arr[i]=-1;
else arr[i]=0;
}
if(n&1){
cout<<ans<<endl;
return 0;
}
pref[0][0][0]=suf[0][n+1][0]=1;
for(int i=1;i<=n;i++){
for(int j=0;j<=n;j++){
for(int l=j;l<=n;l++){
if(arr[i]!=1){
if(j!=n){
pref[l][i][j]=sum(pref[l][i][j],pref[l][i-1][j+1]);
}
}
if(arr[i]!=-1){
if(j!=0){
pref[l][i][j]=sum(pref[l][i][j],pref[l][i-1][j-1]);
if(j==l)pref[l][i][j]=sum(pref[l][i][j],pref[l-1][i-1][j-1]);
}
}
}
}
}
for(int i=n;i>=1;i--){
for(int j=0;j<=n;j++){
for(int l=j;l<=n;l++){
if(arr[i]!=-1){
if(j!=n){
suf[l][i][j]=sum(suf[l][i][j],suf[l][i+1][j+1]);
}
}
if(arr[i]!=1){
if(j!=0){
suf[l][i][j]=sum(suf[l][i][j],suf[l][i+1][j-1]);
if(j==l)suf[l][i][j]=sum(suf[l][i][j],suf[l-1][i+1][j-1]);
}
}
}
}
}
for(int i=1;i<=n;i++){
for(int j=0;j<=n;j++){
for(int l=n;l>=0;l--){
pref[l][i][j]=sum(pref[l][i][j],pref[l+1][i][j]);
suf[l][i][j]=sum(suf[l][i][j],suf[l+1][i][j]);
}
}
}
ans=sum(ans,pref[0][n][0]);
for(int p=1;p<=n;p++){
if(arr[p]==1)continue;
for(int i=p;i<=n;i++){
for(int j=0;j<=n;j++){
for(int l=0;l<2;l++){
dp[i][j][l]=0;
}
}
}
for(int i=0;i*2+1<=n;i++){
dp[p][i*2+1][!i]=pref[i][p-1][0];
}
for(int i=p+1;i<=n;i++){
for(int j=0;j<=n;j++){
for(int l=0;l<2;l++){
if(arr[i]!=-1){
if(j!=n){
dp[i][j][l]=sum(dp[i][j][l],dp[i-1][j+1][l]);
}
}
if(arr[i]!=1){
if(j!=0){
dp[i][j][l]=sum(dp[i][j][l],dp[i-1][j-1][l]);
}
}
if(j<=1&&l==1){
dp[i][j][l]=sum(dp[i][j][l],dp[i][j][0]);
dp[i][j][0]=0;
}
}
if(arr[i]!=-1&&(j&1)==0){
ans=sum(ans,mul(dp[i-1][j+1][1],suf[j>>1][i+1][0]));
if(j==0){
ans=sum(ans,mul(dp[i-1][j+1][0],suf[j>>1][i+1][0]));
}
}
}
}
}
for(int i=1;i<=n;i++){
for(int j=0;j<=n;j++){
for(int l=j;l<=n;l++){
if(arr[i]!=-1){
if(j!=n){
prefi[l][i][j]=sum(prefi[l][i][j],prefi[l][i-1][j+1]);
}
}
if(arr[i]!=1){
if(j!=0){
prefi[l][i][j]=sum(prefi[l][i][j],prefi[l][i-1][j-1]);
if(j==l)prefi[l][i][j]=sum(prefi[l][i][j],prefi[l-1][i-1][j-1]);
}
}
if((j&1)==1&&j==l&&arr[i]!=1){
prefi[l][i][j]=sum(prefi[l][i][j],sub(pref[(l-1)>>1][i-1][0],pref[((l-1)>>1)+1][i-1][0]));
}
}
if(arr[i]!=1&&j){
ans=sum(ans,mul(prefi[j-1][i-1][j-1],suf[0][i+1][j]));
}
if((j&1)==1&&j&&arr[i]!=1){
ans=sum(ans,mul(pref[(j-1)>>1][i-1][0],suf[0][i+1][j]));
}
}
}
for(int i=n;i>=1;i--){
for(int j=0;j<=n;j++){
for(int l=j;l<=n;l++){
if(arr[i]!=1){
if(j!=n){
sufi[l][i][j]=sum(sufi[l][i][j],sufi[l][i+1][j+1]);
}
}
if(arr[i]!=-1){
if(j!=0){
sufi[l][i][j]=sum(sufi[l][i][j],sufi[l][i+1][j-1]);
if(j==l)sufi[l][i][j]=sum(sufi[l][i][j],sufi[l-1][i+1][j-1]);
}
}
if((j&1)==1&&j==l&&arr[i]!=-1){
sufi[l][i][j]=sum(sufi[l][i][j],sub(suf[(l-1)>>1][i+1][0],suf[((l-1)>>1)+1][i+1][0]));
}
}
if(arr[i]!=-1&&j){
ans=sum(ans,mul(sufi[j-1][i+1][j-1],pref[0][i-1][j]));
}
if((j&1)==1&&j&&arr[i]!=-1){
ans=sum(ans,mul(suf[(j-1)>>1][i+1][0],pref[0][i-1][j]));
}
//cerr<<i<<"-"<<j<<":"<<ans<<endl;
}
}
cout<<ans<<endl;
}