#include <bits/stdc++.h>
using namespace std;
int n, m, dp[205][105][205], dpp[205][105], ans, to[205];
char x[205], y[205];
void add(int &a, int b) {
  a += b;
  if (a >= 1000000007) a -= 1000000007;
}
int main() {
  scanf("%d%s", &n, x);
  m = strlen(x);
  memcpy(y, x, sizeof(x[0]) * m);
  for (int i = m - 1; i >= 0; i--) {
    if (y[i] == '(')
      y[i] = ')';
    else
      y[i] = '(';
    for (int j = i + 1; j >= 0; j--)
      if (memcmp(x, y + i + 1 - j, sizeof(x[0]) * j) == 0) {
        to[i] = j;
        break;
      }
  }
  dp[0][0][0] = 1;
  for (int i = 0; i < n * 2; i++)
    for (int j = 0; j <= n; j++)
      for (int k = 0; k < m; k++) {
        if (j < n)
          if (x[k] == '(') {
            if (k != m - 1) add(dp[i + 1][j + 1][k + 1], dp[i][j][k]);
          } else
            add(dp[i + 1][j + 1][to[k]], dp[i][j][k]);
        if (j > 0)
          if (x[k] == ')') {
            if (k != m - 1) add(dp[i + 1][j - 1][k + 1], dp[i][j][k]);
          } else
            add(dp[i + 1][j - 1][to[k]], dp[i][j][k]);
      }
  dpp[0][0] = 1;
  for (int i = 0; i < n * 2; i++)
    for (int j = 0; j <= n; j++) {
      if (j < n) add(dpp[i + 1][j + 1], dpp[i][j]);
      if (j > 0) add(dpp[i + 1][j - 1], dpp[i][j]);
    }
  ans = dpp[n * 2][0];
  for (int i = 0; i < m; i++) add(ans, 1000000007 - dp[n * 2][0][i]);
  printf("%d\n", ans);
  return 0;
}
