#include <bits/stdc++.h>
using namespace std;
string s;
long long dp[705][3][705][3];
int p[705];
const long long MOD = 1e9 + 7;
void func(int l, int r) {
  if (l == r - 1)
    dp[l][0][r][1] = dp[l][0][r][2] = dp[l][1][r][0] = dp[l][2][r][0] = 1;
  else if (l == p[r]) {
    func(l + 1, r - 1);
    for (int cl = 0; cl < 3; cl++)
      for (int cr = 0; cr < 3; cr++) {
        if (cr != 1)
          dp[l][0][r][1] = (dp[l][0][r][1] + dp[l + 1][cl][r - 1][cr]) % MOD;
        if (cr != 2)
          dp[l][0][r][2] = (dp[l][0][r][2] + dp[l + 1][cl][r - 1][cr]) % MOD;
        if (cl != 1)
          dp[l][1][r][0] = (dp[l][1][r][0] + dp[l + 1][cl][r - 1][cr]) % MOD;
        if (cl != 2)
          dp[l][2][r][0] = (dp[l][2][r][0] + dp[l + 1][cl][r - 1][cr]) % MOD;
      }
  } else {
    func(l, p[l]);
    func(p[l] + 1, r);
    for (int i = 0; i < 3; i++)
      for (int j = 0; j < 3; j++)
        for (int k = 0; k < 3; k++)
          for (int m = 0; m < 3; m++) {
            if ((j == k) && (j != 0)) continue;
            dp[l][i][r][m] =
                (dp[l][i][r][m] + dp[l][i][p[l]][j] * dp[p[l] + 1][k][r][m]) %
                MOD;
          }
  }
  return;
}
int main() {
  cin >> s;
  stack<int> st;
  int n = s.size();
  for (int i = 0; i < n; i++) {
    if (s[i] == '(')
      st.push(i);
    else {
      p[i] = st.top();
      p[st.top()] = i;
      st.pop();
    }
  }
  func(0, n - 1);
  long long ans = 0LL;
  for (int cl = 0; cl < 3; cl++)
    for (int cr = 0; cr < 3; cr++) ans = (ans + dp[0][cl][n - 1][cr]) % MOD;
  cout << ans << endl;
  return 0;
}
