#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int mx = 705;
long long int dp[mx][mx][3][3];
char s[mx];
int p[mx];
stack<int> st;
long long int dfs(int l, int r, int lc, int rc) {
  if (l >= r) return 1;
  if (dp[l][r][lc][rc] != -1) return dp[l][r][lc][rc];
  int x = p[l];
  int y = p[r];
  dp[l][r][lc][rc] = 0;
  if (x == r) {
    for (int i = 1; i <= 2; i++)
      if (i != rc)
        dp[l][r][lc][rc] = (dp[l][r][lc][rc] + dfs(l + 1, r - 1, 0, i)) % mod;
    for (int i = 1; i <= 2; i++)
      if (i != lc)
        dp[l][r][lc][rc] = (dp[l][r][lc][rc] + dfs(l + 1, r - 1, i, 0)) % mod;
  } else if (x + 1 == y) {
    for (int i = 1; i <= 2; i++)
      for (int j = 1; j <= 2; j++)
        if (i != lc && j != rc)
          dp[l][r][lc][rc] = (dp[l][r][lc][rc] + dfs(l + 1, x - 1, i, 0) *
                                                     dfs(y + 1, r - 1, 0, j)) %
                             mod;
    for (int i = 1; i <= 2; i++)
      for (int j = 1; j <= 2; j++)
        if (i != j)
          dp[l][r][lc][rc] = (dp[l][r][lc][rc] + dfs(l + 1, x - 1, 0, i) *
                                                     dfs(y + 1, r - 1, j, 0)) %
                             mod;
    for (int i = 1; i <= 2; i++)
      for (int j = 1; j <= 2; j++)
        if (i != lc)
          dp[l][r][lc][rc] = (dp[l][r][lc][rc] + dfs(l + 1, x - 1, i, 0) *
                                                     dfs(y + 1, r - 1, j, 0)) %
                             mod;
    for (int i = 1; i <= 2; i++)
      for (int j = 1; j <= 2; j++)
        if (j != rc)
          dp[l][r][lc][rc] = (dp[l][r][lc][rc] + dfs(l + 1, x - 1, 0, i) *
                                                     dfs(y + 1, r - 1, 0, j)) %
                             mod;
  } else {
    for (int i = 1; i <= 2; i++)
      for (int j = 1; j <= 2; j++)
        if (i != lc && j != rc)
          dp[l][r][lc][rc] =
              (dp[l][r][lc][rc] + dfs(l + 1, x - 1, i, 0) *
                                      dfs(x + 1, y - 1, 0, 0) % mod *
                                      dfs(y + 1, r - 1, 0, j)) %
              mod;
    for (int i = 1; i <= 2; i++)
      for (int j = 1; j <= 2; j++)
        dp[l][r][lc][rc] = (dp[l][r][lc][rc] +
                            dfs(l + 1, x - 1, 0, i) * dfs(x + 1, y - 1, i, j) %
                                mod * dfs(y + 1, r - 1, j, 0)) %
                           mod;
    for (int i = 1; i <= 2; i++)
      for (int j = 1; j <= 2; j++)
        if (i != lc)
          dp[l][r][lc][rc] =
              (dp[l][r][lc][rc] + dfs(l + 1, x - 1, i, 0) *
                                      dfs(x + 1, y - 1, 0, j) % mod *
                                      dfs(y + 1, r - 1, j, 0)) %
              mod;
    for (int i = 1; i <= 2; i++)
      for (int j = 1; j <= 2; j++)
        if (j != rc)
          dp[l][r][lc][rc] =
              (dp[l][r][lc][rc] + dfs(l + 1, x - 1, 0, i) *
                                      dfs(x + 1, y - 1, i, 0) % mod *
                                      dfs(y + 1, r - 1, 0, j)) %
              mod;
  }
  return dp[l][r][lc][rc];
}
int main() {
  memset(dp, -1, sizeof(dp));
  int n;
  scanf("%s", s + 1);
  n = strlen(s + 1);
  for (int i = 1; i <= n; i++)
    if (s[i] == '(')
      st.push(i);
    else {
      p[st.top()] = i;
      p[i] = st.top();
      st.pop();
    }
  long long int ans = dfs(1, n, 0, 0);
  printf("%I64d\n", ans);
  return 0;
}
