#include <bits/stdc++.h>
using namespace std;
#define db(x) cerr<<#x<<"="<<(x)<<" "
#define el cerr<<endl
#define ll long long
const int N=5005;
const ll MOD=1e9+7;
ll dp[N][N]; //dp[i][j]: 前i个(,加了j个)
ll sum[N];
int cnt[N];
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
string s;
cin>>s;
int n=s.size();
s=' '+s;
int cntl=0;
for(int i=1;i<=n;i++){
if(s[i]=='('){
cntl++;
for(int j=i+1;j<=n;j++){
if(s[j]=='('){
i=j-1;
break;
}else{
cnt[cntl]++;
}
}
}
}
dp[0][0]=1;
int cur=0;
for(int i=0;i<=5000;i++){
sum[i]=1;
}
for(int i=1;i<=cntl;i++){
cur+=cnt[i];
for(int j=0;j<=i-cur;j++){
int k=min(j,i-1-cur+cnt[i]);
dp[i][j]+=sum[k];
dp[i][j]%=MOD;
}
for(int j=0;j<=5000;j++){
if(j==0){
sum[j]=dp[i][j];
}else{
sum[j]=sum[j-1]+dp[i][j];
sum[j]%=MOD;
}
}
}
cout<<dp[cntl][cntl-cur]<<'\n';
return 0;
}
dp[i][j]表示对于前i个左括号添加了j个右括号 cnt[i]表示第i到i+1个左括号之间有多少个右括号
dp[i][j]=∑dp[i−1][j−k] 对于所有的k满足j−k≤i−1−j=1∑i−1cnt[i]