func_code_string: #include <bits/stdc++.h>   using namespace std;   const int INF = 0x3f3f3f3f;   const long long INFLL = 0x3f3f3f3f3f3f3f3fLL;   inline long long read() {     long long x = 0, f = 1;     char ch = getchar();     while (ch <  0  || ch >  9 ) {       if (ch ==  - ) f = -1;       ch = getchar();     }     while (ch >=  0  && ch <=  9 ) {       x = x * 10 + ch -  0 ;       ch = getchar();     }     return x * f;   }   const int maxn = 1e5 + 10;   const int mod = 1e9 + 7;   string s;   int len, match[1005];   long long dp[1000][1000][3][3];   void get_match() {     stack<int> sta;     for (int i = 0; i < len; i++) {       if (s[i] ==  ( )         sta.push(i);       else {         int t = sta.top();         sta.pop();         match[i] = t;         match[t] = i;       }     }   }   void dfs(int l, int r) {     if (l + 1 == r) {       dp[l][r][0][1] = 1;       dp[l][r][1][0] = 1;       dp[l][r][0][2] = 1;       dp[l][r][2][0] = 1;       return;     }     if (match[l] == r) {       dfs(l + 1, r - 1);       for (int i = 0; i < 3; i++)         for (int j = 0; j < 3; j++) {           if (j != 1)             dp[l][r][0][1] = (dp[l][r][0][1] + dp[l + 1][r - 1][i][j]) % mod;           if (i != 1)             dp[l][r][1][0] = (dp[l][r][1][0] + dp[l + 1][r - 1][i][j]) % mod;           if (j != 2)             dp[l][r][0][2] = (dp[l][r][0][2] + dp[l + 1][r - 1][i][j]) % mod;           if (i != 2)             dp[l][r][2][0] = (dp[l][r][2][0] + dp[l + 1][r - 1][i][j]) % mod;         }       return;     } else {       int k = match[l];       dfs(l, k);       dfs(k + 1, r);       for (int i = 0; i < 3; i++)         for (int j = 0; j < 3; j++)           for (int x = 0; x < 3; x++)             for (int y = 0; y < 3; y++) {               if ((x == 1 && y == 1) || (x == 2 && y == 2)) continue;               dp[l][r][i][j] =                   (dp[l][r][i][j] + dp[l][k][i][x] * dp[k + 1][r][y][j]) % mod;             }       return;     }   }   int main() {     memset(dp, 0, sizeof(dp));     cin >> s;     len = s.size();     get_match();     dfs(0, len - 1);     long long ans = 0;     for (int i = 0; i < 3; i++)       for (int j = 0; j < 3; j++) ans = (ans + dp[0][len - 1][i][j]) % mod;     cout << ans << endl;     return 0;   }   