#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:100000000000,100000000000")
using namespace std;
const double eps = 1E-9;
const double Exp = 2.718281828459045;
const double Pi = 3.1415926535897932;
const int NMAX = 2000 + 5;
const int MMAX = 100000 + 5;
const int INF = 1000000000;
const long long INFLL = 1000000000000000000ll;
const int BS = 1000000007;
template <typename T>
inline T abs(const T a) {
  if (a < 0) return -a;
  return a;
}
template <typename T>
inline T sqr(const T& a) {
  return a * a;
}
int dp[NMAX][NMAX] = {0};
int main() {
  ios::sync_with_stdio(false);
  int n, m;
  string s;
  cin >> n >> m;
  cin >> s;
  int mn = 0;
  int last = 0;
  for (int i = 0; i < m; i++) {
    if (s[i] == '(') {
      last++;
    } else {
      last--;
    }
    mn = min(mn, last);
  }
  m = n - m;
  dp[0][0] = 1;
  for (int i = 1; i <= m; i++) {
    for (int j = 0; j <= m; j++) {
      dp[i][j] = 0;
      if (j > 0) {
        dp[i][j] += dp[i - 1][j - 1];
        dp[i][j] %= BS;
      }
      if (j < n) {
        dp[i][j] += dp[i - 1][j + 1];
        dp[i][j] %= BS;
      }
    }
  }
  long long ans = 0;
  for (int plen = 0; plen <= m; plen++) {
    for (int pbal = max(-mn, 0); pbal <= m; pbal++) {
      if (m - plen < pbal + last) continue;
      ans = (ans + dp[plen][pbal] * 1ll * dp[m - plen][pbal + last]) % BS;
    }
  }
  cout << ans << endl;
  return 0;
}
