#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;
}
