#include <bits/stdc++.h>
using namespace std;
template <typename T>
ostream &operator<<(ostream &os, const vector<T> &v) {
  os << "{";
  for (typename vector<T>::const_iterator vi = v.begin(); vi != v.end(); ++vi) {
    if (vi != v.begin()) os << ", ";
    os << *vi;
  }
  os << "}";
  return os;
}
template <typename A, typename B>
ostream &operator<<(ostream &os, const pair<A, B> &p) {
  os << '(' << p.first << ", " << p.second << ')';
  return os;
}
long long T, N, M, K;
string s;
long long dp[2100][2100];
void calc() {
  dp[0][0] = 1;
  for (int i = (int)(1); (i) < int(2010); (i)++) {
    for (int j = (int)(0); (j) < int(i + 1); (j)++) {
      long long aux = 0;
      if (j > 0) aux = dp[i - 1][j - 1];
      if (j < i) aux = (aux + dp[i - 1][j + 1]) % 1000000007;
      dp[i][j] = aux;
    }
  }
}
void solve() {
  int saldo = 0, menor = 0;
  for (int i = (int)(0); (i) < int((long long)(s.size())); (i)++) {
    if (s[i] == '(')
      saldo++;
    else
      saldo--;
    menor = min(menor, saldo);
  }
  calc();
  long long ans = 0;
  menor *= -1;
  for (int i = 0; i <= N - M; i++) {
    for (int j = menor; j <= i; j++) {
      int tamQ = N - M - i;
      int balQ = saldo + j;
      if (balQ > tamQ) continue;
      long long aux = (dp[tamQ][balQ] * dp[i][j]) % 1000000007;
      ans = (ans + aux) % 1000000007;
    }
  }
  cout << ans << "\n";
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  cin >> N >> M;
  cin >> s;
  solve();
  return 0;
}
