#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const long long INFLL = 0x3f3f3f3f3f3f3f3fLL;
inline long long read() {
  long long x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
const int maxn = 1e5 + 10;
const int mod = 1e9 + 7;
string s;
int len, match[1005];
long long dp[1000][1000][3][3];
void get_match() {
  stack<int> sta;
  for (int i = 0; i < len; i++) {
    if (s[i] == '(')
      sta.push(i);
    else {
      int t = sta.top();
      sta.pop();
      match[i] = t;
      match[t] = i;
    }
  }
}
void dfs(int l, int r) {
  if (l + 1 == r) {
    dp[l][r][0][1] = 1;
    dp[l][r][1][0] = 1;
    dp[l][r][0][2] = 1;
    dp[l][r][2][0] = 1;
    return;
  }
  if (match[l] == r) {
    dfs(l + 1, r - 1);
    for (int i = 0; i < 3; i++)
      for (int j = 0; j < 3; j++) {
        if (j != 1)
          dp[l][r][0][1] = (dp[l][r][0][1] + dp[l + 1][r - 1][i][j]) % mod;
        if (i != 1)
          dp[l][r][1][0] = (dp[l][r][1][0] + dp[l + 1][r - 1][i][j]) % mod;
        if (j != 2)
          dp[l][r][0][2] = (dp[l][r][0][2] + dp[l + 1][r - 1][i][j]) % mod;
        if (i != 2)
          dp[l][r][2][0] = (dp[l][r][2][0] + dp[l + 1][r - 1][i][j]) % mod;
      }
    return;
  } else {
    int k = match[l];
    dfs(l, k);
    dfs(k + 1, r);
    for (int i = 0; i < 3; i++)
      for (int j = 0; j < 3; j++)
        for (int x = 0; x < 3; x++)
          for (int y = 0; y < 3; y++) {
            if ((x == 1 && y == 1) || (x == 2 && y == 2)) continue;
            dp[l][r][i][j] =
                (dp[l][r][i][j] + dp[l][k][i][x] * dp[k + 1][r][y][j]) % mod;
          }
    return;
  }
}
int main() {
  memset(dp, 0, sizeof(dp));
  cin >> s;
  len = s.size();
  get_match();
  dfs(0, len - 1);
  long long ans = 0;
  for (int i = 0; i < 3; i++)
    for (int j = 0; j < 3; j++) ans = (ans + dp[0][len - 1][i][j]) % mod;
  cout << ans << endl;
  return 0;
}
