| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 | 
							- package main
 
- import "fmt"
 
- const MOD int = 1000000007
 
- func 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
 
- }
 
 
  |