#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const int maxn = 707, mod = 1e9 + 7;
int f_mul(int a, int b, int mod) {
  int ans = 0;
  while (b) {
    if (b & 1) ans = ((ans % mod) + (a % mod)) % mod;
    b >>= 1;
    a = ((a % mod) + (a % mod)) % mod;
  }
  return ans;
}
int dp[maxn][maxn][3][3], flag[maxn];
char s[maxn];
stack<int> st;
int main() {
  scanf("%s", s + 1);
  int n = strlen(s + 1);
  for (int i = 1; i <= n; i++) {
    if (s[i] == '(')
      st.push(i);
    else
      flag[st.top()] = i, st.pop();
  }
  for (int i = 1; i < n; i++) {
    if (flag[i] == i + 1) {
      dp[i][i + 1][0][1] = 1;
      dp[i][i + 1][1][0] = 1;
      dp[i][i + 1][0][2] = 1;
      dp[i][i + 1][2][0] = 1;
    }
  }
  for (int len = 2; len <= n; len++) {
    for (int i = 1; i <= n; i++) {
      int to = i + len - 1;
      if (to > n) break;
      if (flag[i] == to) {
        for (int p = 0; p < 3; p++) {
          for (int q = 0; q < 3; q++) {
            if (q != 1) {
              dp[i][to][0][1] =
                  (dp[i][to][0][1] + dp[i + 1][to - 1][p][q]) % mod;
            }
            if (p != 1) {
              dp[i][to][1][0] =
                  (dp[i][to][1][0] + dp[i + 1][to - 1][p][q]) % mod;
            }
            if (q != 2) {
              dp[i][to][0][2] =
                  (dp[i][to][0][2] + dp[i + 1][to - 1][p][q]) % mod;
            }
            if (p != 2) {
              dp[i][to][2][0] =
                  (dp[i][to][2][0] + dp[i + 1][to - 1][p][q]) % mod;
            }
          }
        }
      } else {
        int k = flag[i];
        for (int p = 0; p < 3; p++) {
          for (int q = 0; q < 3; q++) {
            for (int pp = 0; pp < 3; pp++) {
              for (int qq = 0; qq < 3; qq++) {
                if (pp == 1 && qq == 1 || pp == 2 && qq == 2) continue;
                dp[i][to][p][q] =
                    (dp[i][to][p][q] +
                     f_mul(dp[i][k][p][pp], dp[k + 1][to][qq][q], mod) % mod) %
                    mod;
              }
            }
          }
        }
      }
    }
  }
  int mx = 0;
  for (int p = 0; p < 3; p++) {
    for (int q = 0; q < 3; q++) {
      mx = (mx + dp[1][n][p][q]) % mod;
    }
  }
  cout << mx << endl;
  return 0;
}
