#include <bits/stdc++.h>
using namespace std;
template <class T>
bool umin(T& a, T b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
bool umax(T& a, T b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
const int N = 1e5 + 7;
const int INF = 1e9 + 7;
const int NN = 4e3 + 2;
int a, b, tot, c, d[N], n, m, dp[NN][NN], cp[NN][NN], t, mn;
char s[N];
int mod(int x) { return x % INF; }
int f1(int x, int y) {
  if (y < 0) return 0;
  if (x == n) return !y;
  int state = y - tot + (NN / 2);
  int& re = cp[x - m][state];
  if (~re) return re;
  re = 0;
  re = mod(re + f1(x + 1, y + 1));
  re = mod(re + f1(x + 1, y - 1));
  return re;
}
int f(int x, int y) {
  if (y < 0 || x > t) return 0;
  int& ret = dp[x][y];
  if (~ret) return ret;
  ret = 0;
  if (y + mn >= 0) ret = mod(ret + f1(x + m, y + tot));
  ret = mod(ret + f(x + 1, y + 1));
  ret = mod(ret + f(x + 1, y - 1));
  return ret;
}
int main() {
  memset(dp, -1, sizeof dp);
  memset(cp, -1, sizeof cp);
  scanf("%d%d", &n, &m);
  scanf("%s", s);
  t = n - m;
  for (int i = 0; i < m; i++) {
    d[i] = (s[i] == '(' ? 1 : -1);
    d[i] += (!i ? 0 : d[i - 1]);
    umin(mn, d[i]);
  }
  tot = d[m - 1];
  printf("%d\n", f(0, 0));
  return 0;
}
