← Home
package main

import (
	"bufio"
	"fmt"
	"os"
)

const MOD int64 = 1000000007

func main() {
	in := bufio.NewReaderSize(os.Stdin, 1<<20)
	var n int
	var s string
	fmt.Fscan(in, &n, &s)

	L := 2 * n
	m := len(s)
	if m > L {
		fmt.Println(0)
		return
	}

	pi := make([]int, m)
	for i := 1; i < m; i++ {
		j := pi[i-1]
		for j > 0 && s[i] != s[j] {
			j = pi[j-1]
		}
		if s[i] == s[j] {
			j++
		}
		pi[i] = j
	}

	next := make([][2]int, m+1)
	chars := [2]byte{'(', ')'}
	for st := 0; st <= m; st++ {
		for c := 0; c < 2; c++ {
			j := st
			for j > 0 && (j == m || s[j] != chars[c]) {
				j = pi[j-1]
			}
			if j < m && s[j] == chars[c] {
				j++
			}
			next[st][c] = j
		}
	}

	K := m + 1
	size := (n + 1) * K * 2
	cur := make([]int64, size)
	nxt := make([]int64, size)

	idx := func(bal, st, found int) int {
		return ((bal*K + st) << 1) | found
	}

	cur[idx(0, 0, 0)] = 1

	for pos := 0; pos < L; pos++ {
		for i := range nxt {
			nxt[i] = 0
		}
		rem := L - (pos + 1)
		for bal := 0; bal <= n; bal++ {
			base := bal * K * 2
			for st := 0; st <= m; st++ {
				off := base + st*2

				v0 := cur[off]
				if v0 != 0 {
					nb := bal + 1
					if nb <= n && nb <= rem {
						ns := next[st][0]
						nf := 0
						if ns == m {
							nf = 1
						}
						ni := ((nb*K + ns) << 1) | nf
						x := nxt[ni] + v0
						if x >= MOD {
							x -= MOD
						}
						nxt[ni] = x
					}
					if bal > 0 {
						nb = bal - 1
						if nb <= rem {
							ns := next[st][1]
							nf := 0
							if ns == m {
								nf = 1
							}
							ni := ((nb*K + ns) << 1) | nf
							x := nxt[ni] + v0
							if x >= MOD {
								x -= MOD
							}
							nxt[ni] = x
						}
					}
				}

				v1 := cur[off|1]
				if v1 != 0 {
					nb := bal + 1
					if nb <= n && nb <= rem {
						ns := next[st][0]
						ni := ((nb*K + ns) << 1) | 1
						x := nxt[ni] + v1
						if x >= MOD {
							x -= MOD
						}
						nxt[ni] = x
					}
					if bal > 0 {
						nb = bal - 1
						if nb <= rem {
							ns := next[st][1]
							ni := ((nb*K + ns) << 1) | 1
							x := nxt[ni] + v1
							if x >= MOD {
								x -= MOD
							}
							nxt[ni] = x
						}
					}
				}
			}
		}
		cur, nxt = nxt, cur
	}

	var ans int64
	for st := 0; st <= m; st++ {
		ans += cur[idx(0, st, 1)]
		if ans >= MOD {
			ans -= MOD
		}
	}

	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	fmt.Fprintln(out, ans)
	out.Flush()
}