#include <bits/stdc++.h>
int n, len, la[205], a[205], qr[205][2], dp[205][205][205], DP[205][205], pres,
    ans;
char s[205];
void pre() {
  len = strlen(s);
  for (int i = 0; i < len; i++)
    if (s[i] == '(')
      a[i + 1] = 0;
    else
      a[i + 1] = 1;
  for (int i = 0; i < len; i++) {
    for (int j = 0; j < 2; j++) {
      int x = i;
      while (1) {
        if (a[x + 1] == j) {
          qr[i][j] = x + 1;
          break;
        }
        if (!x) break;
        x = la[x];
      }
    }
    int x = i;
    while (x) {
      x = la[x];
      if (a[x + 1] == a[i + 1]) {
        la[i + 1] = x + 1;
        break;
      }
    }
  }
}
int main() {
  scanf("%d", &n);
  scanf("%s", s);
  pre();
  dp[0][0][0] = DP[0][0] = 1;
  for (int i = 1; i <= n * 2; i++)
    for (int j = 0; j <= i; j++) {
      if (j) DP[i][j] = DP[i - 1][j - 1] % 1000000007;
      DP[i][j] = (DP[i][j] + DP[i - 1][j + 1]) % 1000000007;
    }
  if (a[len] == 0)
    pres = 1;
  else
    pres = -1;
  for (int i = 0; i <= 2 * n; i++)
    for (int j = 0; j <= i; j++)
      for (int k = 0; k < len; k++) {
        if (j + pres >= 0 && k == len - 1 && 2 * n - i - 1 >= 0)
          ans = 1ll *
                (ans +
                 1ll * dp[i][j][k] * DP[2 * n - i - 1][j + pres] % 1000000007) %
                1000000007;
        dp[i + 1][j + 1][qr[k][0]] =
            (dp[i + 1][j + 1][qr[k][0]] + dp[i][j][k]) % 1000000007;
        if (j)
          dp[i + 1][j - 1][qr[k][1]] =
              (dp[i + 1][j - 1][qr[k][1]] + dp[i][j][k]) % 1000000007;
      }
  printf("%d\n", ans);
}
