func_code_string: #include <bits/stdc++.h>   using namespace std;   long long f[800][800][3][3];   int b[400][2], c[800];   int main() {     string s;     while (cin >> s) {       memset(f, 0, sizeof(f));       int t[800];       for (int i = 0, x = 0, k = 0; i < s.size(); i++) {         if (s[i] ==  ( ) {           b[++x][0] = i + 1;           c[i + 1] = x;           k++;           t[k] = i + 1;         } else {           c[i + 1] = c[t[k--]];           b[c[i + 1]][1] = i + 1;         }       }       for (int i = 1; i < s.size(); i++) {         if (c[i] == c[i + 1]) {           f[i][i + 1][1][0] = 1;           f[i][i + 1][2][0] = 1;           f[i][i + 1][0][1] = 1;           f[i][i + 1][0][2] = 1;         }       }       for (int d = 3; d < s.size(); d += 2) {         for (int i = 1; i <= s.size() - d; i++) {           int j = i + d;           if (s[i - 1] == s[j - 1] || (s[i - 1] ==  )  && s[j - 1] ==  ( ))             continue;           if (c[i] == c[j]) {             f[i][j][0][1] = (f[i + 1][j - 1][1][0] + f[i + 1][j - 1][2][0] +                              f[i + 1][j - 1][1][2] + f[i + 1][j - 1][2][2] +                              f[i + 1][j - 1][0][2] + f[i + 1][j - 1][0][0]) %                             1000000007;             f[i][j][1][0] = (f[i + 1][j - 1][0][1] + f[i + 1][j - 1][0][2] +                              f[i + 1][j - 1][2][1] + f[i + 1][j - 1][2][2] +                              f[i + 1][j - 1][2][0] + f[i + 1][j - 1][0][0]) %                             1000000007;             f[i][j][0][2] = (f[i + 1][j - 1][1][0] + f[i + 1][j - 1][2][0] +                              f[i + 1][j - 1][1][1] + f[i + 1][j - 1][2][1] +                              f[i + 1][j - 1][0][1] + f[i + 1][j - 1][0][0]) %                             1000000007;             f[i][j][2][0] = (f[i + 1][j - 1][0][1] + f[i + 1][j - 1][0][2] +                              f[i + 1][j - 1][1][1] + f[i + 1][j - 1][1][2] +                              f[i + 1][j - 1][1][0] + f[i + 1][j - 1][0][0]) %                             1000000007;           } else {             for (int x = 0; x <= 2; x++) {               for (int y = 0; y <= 2; y++) {                 for (int m = 0; m <= 2; m++) {                   for (int n = 0; n <= 2; n++) {                     if (m == n && m != 0 && n != 0) continue;                     f[i][j][x][y] += f[i][b[c[i]][1]][x][m] *                                      f[b[c[i]][1] + 1][j][n][y] % 1000000007;                     f[i][j][x][y] %= 1000000007;                   }                 }               }             }           }         }       }       int n = s.size();       cout << (f[1][n][0][0] + f[1][n][0][1] + f[1][n][0][2] + f[1][n][1][0] +                f[1][n][1][1] + f[1][n][1][2] + f[1][n][2][0] + f[1][n][2][1] +                f[1][n][2][2]) %                   1000000007            << endl;     }     return 0;   }   