| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | 
							- import java.util.ArrayList;
 
- import java.util.HashMap;
 
- import java.util.List;
 
- import java.util.Scanner;
 
- public class Main {
 
-     private static final int MOD = 1000000007;
 
-     public static void main(String[] args) {
 
-         Scanner scanner = new Scanner(System.in);
 
-         String s1 = scanner.nextLine();
 
-         String s2 = scanner.nextLine();
 
-         scanner.close();
 
-         int lb = 0;
 
-         char[] ch1 = s1.toCharArray();
 
-         char[] ch2 = s2.toCharArray();
 
-         for (char c : ch1) {
 
-             lb += c == '(' ? 1 : -1;
 
-         }
 
-         for (char c : ch2) {
 
-             lb += c == '(' ? 1 : -1;
 
-         }
 
-         if (lb != 0) {
 
-             System.out.println(0);
 
-             return;
 
-         }
 
-         HashMap<List<Integer>, Integer> map = new HashMap<>();
 
-         int res = dfs(ch1, ch2, 0, 0, 0, map);
 
-         System.out.println(res);
 
-     }
 
-     private static int dfs(char[] ch1, char[] ch2, int i1, int i2, int lb, HashMap<List<Integer>, Integer> map) {
 
-         if (i1 == ch1.length && i2 == ch2.length) {
 
-             if (lb == 0) return 1;
 
-             return 0;
 
-         }
 
-         Integer res;
 
-         List<Integer> key = new ArrayList<>();
 
-         key.add(i1);
 
-         key.add(i2);
 
-         key.add(lb);
 
-         if ((res = map.get(key)) != null) return res;
 
-         res = 0;
 
-         if (i1 < ch1.length) {
 
-             if (ch1[i1] == '(') {
 
-                 res = (res + dfs(ch1, ch2, i1+1, i2, lb+1, map)) % MOD;
 
-             } else if (lb != 0) {
 
-                 res = (res + dfs(ch1, ch2, i1+1, i2, lb-1, map)) % MOD;
 
-             }
 
-         }
 
-         if (i2 < ch2.length) {
 
-             if (ch2[i2] == '(') {
 
-                 res = (res + dfs(ch1, ch2, i1, i2+1, lb+1, map)) % MOD;
 
-             } else if (lb != 0) {
 
-                 res = (res + dfs(ch1, ch2, i1, i2+1, lb-1, map)) % MOD;
 
-             } 
 
-         }
 
-         map.put(key, res);
 
-         return res;
 
-     }
 
- }
 
 
  |