#include <bits/stdc++.h>
using namespace std;
char ss[210];
int s[210];
int q[210];
int qb, qf, used;
int dp[210][210][210][2];
int m;
struct node {
  int nxt[210], fail, cnt;
  void clear() {
    memset(nxt, -1, sizeof nxt);
    fail = -1;
    cnt = 0;
  }
} mem[210];
struct AC_automation {
  int newnode() {
    int ans = ++used;
    mem[ans].clear();
    return ans;
  }
  void init() {
    used = -1;
    newnode();
    qb = qf = 0;
  }
  void insert(int *s, int n, int val) {
    int now = 0;
    for (int i = 0; i < n; i++) {
      if (mem[now].nxt[s[i]] == -1) mem[now].nxt[s[i]] = newnode();
      now = mem[now].nxt[s[i]];
    }
    mem[now].cnt += val;
    return;
  }
  void build() {
    mem[0].fail = 0;
    for (int i = 0; i < m; i++) {
      if (mem[0].nxt[i] == -1)
        mem[0].nxt[i] = 0;
      else {
        mem[mem[0].nxt[i]].fail = 0;
        q[qb++] = mem[0].nxt[i];
      }
    }
    while (qb > qf) {
      int u = q[qf++];
      mem[u].cnt += mem[mem[u].fail].cnt;
      for (int i = 0; i < m; i++) {
        if (mem[u].nxt[i] == -1)
          mem[u].nxt[i] = mem[mem[u].fail].nxt[i];
        else {
          mem[mem[u].nxt[i]].fail = mem[mem[u].fail].nxt[i];
          q[qb++] = mem[u].nxt[i];
        }
      }
    }
  }
} ac;
void add(int &u, int v) {
  u += v;
  if (u >= 1000000007) u -= 1000000007;
}
int main() {
  m = 2;
  int n;
  scanf("%d", &n);
  scanf("%s", ss);
  int m = strlen(ss);
  for (int i = 0; i < m; i++) {
    if (ss[i] == '(')
      s[i] = 1;
    else
      s[i] = 0;
  }
  ac.init();
  ac.insert(s, m, 1);
  ac.build();
  dp[0][0][0][0] = 1;
  for (int i = 0; i < 2 * n; i++) {
    for (int j = 0; j <= used; j++) {
      for (int sum = 0; sum <= 2 * n; sum++) {
        for (int k = 0; k < 2; k++) {
          int kk = k;
          int fj = mem[j].nxt[1];
          if (k == 0 && mem[fj].cnt) kk = 1;
          add(dp[i + 1][fj][sum + 1][kk], dp[i][j][sum][k]);
          if (sum) {
            kk = k;
            int sj = mem[j].nxt[0];
            if (k == 0 && mem[sj].cnt) kk = 1;
            add(dp[i + 1][sj][sum - 1][kk], dp[i][j][sum][k]);
          }
        }
      }
    }
  }
  int ans = 0;
  for (int i = 0; i <= used; i++) add(ans, dp[2 * n][i][0][1]);
  printf("%d\n", ans);
  return 0;
}
