#include <bits/stdc++.h>
using namespace std;
int open, close, n, m;
int dp[3000][3000][2];
int f(int pos, int sopen, bool crossed) {
  if (pos == n - m + 1 && !crossed) return 0;
  if (pos == n - m + 1 && sopen == 0) return 1;
  if (pos == n - m + 1 || sopen < 0) return 0;
  long long int ret = dp[pos][sopen][crossed];
  if (ret != -1) return ret;
  ret = 0;
  if (!crossed) {
    (ret += f(pos + 1, sopen + 1, 0)) %= int(1e9 + 7);
    if (sopen >= close)
      (ret += f(pos + 1, sopen - close + open, 1)) %= int(1e9 + 7);
    (ret += f(pos + 1, sopen - 1, 0)) %= int(1e9 + 7);
  } else {
    (ret += f(pos + 1, sopen + 1, 1)) %= int(1e9 + 7);
    (ret += f(pos + 1, sopen - 1, 1)) %= int(1e9 + 7);
  }
  return dp[pos][sopen][crossed] = ret;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n >> m;
  string s;
  cin >> s;
  memset(dp, -1, sizeof(dp));
  for (int i = 0; i < m; i++) {
    if (s[i] == ')') {
      if (open > 0)
        open--;
      else
        close++;
    } else
      open++;
  }
  cout << f(0, 0, 0) << endl;
}
