#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e9 + 7;
const long long MINT = ~0u >> 1;
const int mod = 1e9 + 7;
const int maxn = 2007;
int dp[maxn][maxn];
bool visit[maxn][maxn];
int n, m;
char str[100009];
int dfs(int len, int x) {
  if (len < x) return 0;
  if (x < 0) return 0;
  if (len == 1) {
    if (x == 1)
      return 1;
    else
      return 0;
  }
  if (len == 0 && x == 0) return 1;
  if (visit[len][x]) return dp[len][x];
  visit[len][x] = true;
  int ret(0);
  ret += dfs(len - 1, x - 1);
  ret += dfs(len - 1, x + 1);
  return dp[len][x] = (ret >= mod ? ret - mod : ret);
}
int dp1[maxn][maxn];
void Init() {
  dp1[0][0] = 1;
  for (int i = 0; i < 2001; i++) {
    for (int j = 0; j <= i; j++) {
      if (!dp1[i][j]) continue;
      if (i + 1 - (j + 1) <= j + 1) (dp1[i + 1][j + 1] += dp1[i][j]) %= mod;
      if (i + 1 - j <= j) (dp1[i + 1][j] += dp1[i][j]) %= mod;
    }
  }
}
int solve() {
  if (n & 1) return 0;
  int ans(0), fg(0), f = 0;
  int plen = strlen(str);
  for (int i = 0; i < plen; i++) {
    if (str[i] == '(')
      fg++;
    else
      fg--;
    if (fg < 0) f = min(f, fg);
  }
  if (n == m && f) return 0;
  int lack = n - m;
  for (int p = 0; p <= lack; p++) {
    for (int l = 0; l <= p; l++) {
      int s = l - (p - l) + fg;
      if (s < 0) continue;
      if (f < 0 && l - (p - l) < -f) continue;
      int q = lack - p;
      int lnum = dp1[p][l];
      int rnum = dfs(q, s);
      ans += (lnum * 1ll * rnum) % mod;
      if (ans >= mod) ans -= mod;
    }
  }
  return ans;
}
int main() {
  dfs(2001, 0);
  Init();
  scanf("%d%d%s", &n, &m, str);
  cout << solve();
  return 0;
}
