#include <bits/stdc++.h>
using namespace std;
const int Mod = 1000000007;
const int N = 2002;
char arr[100005];
int n, m;
int needToClose, needToOpen;
int memo[N][N << 1][2];
int dp(int i, int op, bool part) {
  if (i == n - m) {
    if ((part && op == N) || (!part && op == N + needToOpen && !needToClose))
      return 1;
    return 0;
  }
  int &ret = memo[i][op][part];
  if (ret != -1) return ret;
  ret = 0;
  if (!part && op - N >= needToOpen) {
    int required = needToClose + (op - N) - needToOpen;
    if (required <= n - m - i) ret = dp(i, required + N, 1) % Mod;
  }
  ret = (0LL + ret + dp(i + 1, op + 1, part)) % Mod;
  if (op > N) ret = (0LL + ret + dp(i + 1, op - 1, part)) % Mod;
  return ret;
}
int main() {
  scanf("%d %d %s", &n, &m, arr);
  int len = strlen(arr);
  int open = 0;
  for (int i = 0; i < len; i++) {
    if (arr[i] == '(')
      ++open;
    else {
      if (open)
        --open;
      else
        ++needToOpen;
    }
  }
  open = 0;
  for (int i = len - 1; i >= 0; i--) {
    if (arr[i] == ')')
      ++open;
    else {
      if (open)
        --open;
      else
        ++needToClose;
    }
  }
  if (n % 2 == 1 || needToClose > n - m || needToOpen > n - m) {
    cout << 0 << endl;
    return 0;
  }
  memset(memo, -1, sizeof memo);
  int res = dp(0, N, 0);
  cout << res << endl;
  return 0;
}
