#include <bits/stdc++.h>
using namespace std;
template <class T>
ostream& operator<<(ostream& fout, const vector<T>& vec) {
  for (size_t i = 0; i < vec.size(); ++i) {
    fout << vec[i] << ' ';
  }
  return fout;
}
template <class T>
istream& operator>>(istream& fin, vector<T>& vec) {
  for (size_t i = 0; i < vec.size(); ++i) {
    cin >> vec[i];
  }
  return fin;
}
int64_t md = 1000000007;
int64_t dp[2200][4200];
int64_t Solve() {
  dp[0][0] = 1;
  for (int64_t i = 1; i <= 2000; ++i) {
    for (int64_t x = 0; x <= 4000; ++x) {
      for (int64_t j = -1; j <= 1; j += 2) {
        if (x + j < 0) continue;
        dp[i][x] += dp[i - 1][x + j];
        dp[i][x] %= md;
      }
    }
  }
  int64_t n, m;
  cin >> n >> m;
  string input;
  cin >> input;
  int64_t k = 1e9;
  int64_t t = 0;
  for (int64_t i = 0; i < m; ++i) {
    if (input[i] == '(') {
      ++t;
    } else {
      --t;
    }
    k = min(k, t);
  }
  int64_t df = n - m;
  int64_t res = 0;
  assert(k <= t);
  for (int64_t j = 0; j <= df; ++j) {
    int64_t l = df - j;
    for (int64_t b = 0; b <= 2000; ++b) {
      int64_t sm = k + b;
      if (sm >= 0) {
        int64_t nd = b + t;
        assert(nd >= 0);
        if (nd > 4000) {
          continue;
        }
        res += dp[j][b] * dp[l][nd];
        res %= md;
      }
    }
  }
  cout << res << '\n';
  return 0;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  return Solve();
}
