#include <bits/stdc++.h>
using namespace std;
long long dp[2005][2005], np[2005][2005];
long long bracket(long long i, long long j);
int main() {
  memset(dp, -1, sizeof(dp));
  long long n, k, countx = 0, temp, bound = 0;
  string d;
  cin >> n >> k;
  cin >> d;
  freopen("Dtest.txt", "r", stdin);
  for (int i = 0; i < 2000; i++) {
    for (int j = 0; j < 2000; j++) scanf("%lld", &np[i][j]);
  }
  for (long long i = 0; i < d.length(); i++) {
    if (d[i] == '(')
      countx++;
    else
      countx--;
    bound = min(bound, countx);
  }
  for (long long i = 0; i <= n - k; i++) {
    for (long long j = 0; j <= n - k; j++) temp = bracket(i, j);
  }
  for (long long i = 0; i <= n - k; i++) {
    for (long long j = 0; j <= n - k; j++) {
      if (dp[i][j] == -1) dp[i][j] = 0;
    }
  }
  long long sum = 0;
  for (long long i = 0; i <= n - k; i++) {
    for (long long j = 0; j <= n - k; j++) {
      if (-1 * bound <= j && n - k - i >= 0 && j + countx <= n - k) {
        sum += dp[i][j] * dp[n - k - i][j + countx];
        sum %= 1000000007;
      }
    }
  }
  printf("%I64d\n", sum);
}
long long bracket(long long i, long long j) {
  if (i < j) return 0;
  if (j < 0) return 0;
  if (i == 0 && j == 0) return dp[i][j] = 1;
  if (i == 0 && j != 0) return dp[i][j] = 0;
  if (dp[i][j] != -1) return dp[i][j];
  dp[i][j] = bracket(i - 1, j - 1) + bracket(i - 1, j + 1);
  dp[i][j] += 1000000007;
  return dp[i][j] %= 1000000007;
}
