#include <bits/stdc++.h>
using namespace std;
int modulo = 1000000007LL;
int n, m;
string cad;
map<int, int> memo[2003][2];
int max_nega;
int acumulado;
int falta;
void Mod(int &x) {
  if (x >= modulo) {
    x -= modulo;
  }
}
int go(int coloco, int lado, int value) {
  if (value < 0) return 0;
  if (coloco >= falta) {
    if (lado == 1)
      return value == 0;
    else
      return ((value + max_nega >= 0) && ((value + acumulado) == 0));
  }
  if (memo[coloco][lado].count(value)) return memo[coloco][lado][value];
  int res = 0;
  if (lado == 0) {
    res += go(coloco + 1, lado, value + 1);
    Mod(res);
    res += go(coloco + 1, lado, value - 1);
    Mod(res);
    if (value + max_nega >= 0) {
      res += go(coloco, 1 - lado, value + acumulado);
      Mod(res);
    }
  } else {
    res += go(coloco + 1, lado, value + 1);
    Mod(res);
    res += go(coloco + 1, lado, value - 1);
    Mod(res);
  }
  return memo[coloco][lado][value] = res;
}
int main() {
  cin >> n >> m;
  cin >> cad;
  int val = 0;
  int cur = 0;
  bool nega = false;
  for (int i = 0; i < cad.size(); i++) {
    if (cad[i] == '(')
      cur++;
    else
      cur--;
    if (cur < 0 && !nega) nega = true;
    val = min(cur, val);
  }
  acumulado = cur;
  falta = n - m;
  max_nega = val;
  long long res = 0;
  res = go(0, 0, 0);
  if (cur == 0 && falta == 0) res = !nega;
  cout << res << endl;
  return 0;
}
