| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 | package mainimport "fmt"const MOD int = 1000000007func main() {	var s1, s2 string	fmt.Scanln(&s1)	fmt.Scanln(&s2)	lb := 0	for _, r := range s1 {		if r == '(' {			lb++		} else {			lb--		}	}	for _, r := range s2 {		if r == '(' {			lb++		} else {			lb--		}	}	if lb != 0 {		fmt.Println(0)		return	}	m := make(map[[3]int]int)	res := dfs([]rune(s1), []rune(s2), len(s1), len(s2), 0, 0, 0, m)	fmt.Println(res)}func dfs(s1, s2 []rune, l1, l2, i1, i2, lb int, m map[[3]int]int) int {	if i1 == l1 && i2 == l2 {		if lb == 0 {			return 1		}		return 0	}	if v, ok := m[[3]int{i1, i2, lb}]; ok {		return v	}	res := 0	if i1 < l1 {		if s1[i1] == '(' {			res = (res + dfs(s1, s2, l1, l2, i1+1, i2, lb+1, m)) % MOD		} else if lb != 0 {			res = (res + dfs(s1, s2, l1, l2, i1+1, i2, lb-1, m)) % MOD		}	}	if i2 < l2 {		if s2[i2] == '(' {			res = (res + dfs(s1, s2, l1, l2, i1, i2+1, lb+1, m)) % MOD		} else if lb != 0 {			res = (res + dfs(s1, s2, l1, l2, i1, i2+1, lb-1, m)) % MOD		}	}	m[[3]int{i1, i2, lb}] = res	return res}
 |