#include <bits/stdc++.h>
using namespace std;
string s;
const int mod = 1000000007;
long long int dp[950][950][5][5], n, ans = 0;
long long int head[950], tail[950], cnt = -1;
void dfs(int l, int r) {
  if (l + 1 == r) {
    dp[l][r][0][1] = dp[l][r][0][2] = dp[l][r][1][0] = dp[l][r][2][0] = 1;
    return;
  } else if (tail[l] == r) {
    dfs(l + 1, r - 1);
    for (int i = 0; i <= 2; i++)
      for (int j = 0; j <= 2; j++) {
        if (j != 1)
          dp[l][r][0][1] = (dp[l + 1][r - 1][i][j] + dp[l][r][0][1]) % mod;
        if (j != 2)
          dp[l][r][0][2] = (dp[l + 1][r - 1][i][j] + dp[l][r][0][2]) % mod;
        if (i != 1)
          dp[l][r][1][0] = (dp[l + 1][r - 1][i][j] + dp[l][r][1][0]) % mod;
        if (i != 2)
          dp[l][r][2][0] = (dp[l + 1][r - 1][i][j] + dp[l][r][2][0]) % mod;
      }
  } else {
    dfs(l, tail[l]);
    dfs(tail[l] + 1, r);
    for (int i = 0; i <= 2; i++)
      for (int j = 0; j <= 2; j++)
        for (int f = 0; f <= 2; f++)
          for (int k = 0; k <= 2; k++) {
            if (j == 1 && f == 1) continue;
            if (j == 2 && f == 2) continue;
            dp[l][r][i][k] =
                (dp[l][r][i][k] +
                 (dp[l][tail[l]][i][j] * dp[tail[l] + 1][r][f][k]) % mod) %
                mod;
          }
  }
}
int main() {
  cin >> s;
  n = s.size();
  for (int i = 0; i < n; i++) {
    if (s[i] == '(')
      head[cnt++] = i;
    else
      tail[head[--cnt]] = i;
  }
  dfs(0, n - 1);
  for (int i = 0; i <= 2; i++)
    for (int j = 0; j <= 2; j++) {
      ans += dp[0][n - 1][i][j];
    }
  ans %= mod;
  cout << ans << endl;
  return 0;
}
