#include <bits/stdc++.h>
using namespace std;
const int N = 705, mod = 1e9 + 7;
inline void inc(int& x, int y) {
  x += y;
  x >= mod ? x -= mod : x;
}
int n, sta[N], top, f[N][N][3][3], mch[N];
char ch[N];
int dp(int l, int r, int lc, int rc) {
  int& d = f[l][r][lc][rc];
  if (d >= 0) return d;
  d = 0;
  if (mch[r] == l) {
    if (lc && rc) return d = 0;
    if (!lc && !rc) return d = 0;
    if (l + 1 == r) return d = 1;
    for (int i = 0; i < 3; ++i)
      for (int j = 0; j < 3; ++j) {
        if (lc && lc == i) continue;
        if (rc && rc == j) continue;
        inc(d, dp(l + 1, r - 1, i, j));
      }
    return d;
  }
  if (mch[r] == r - 1) {
    for (int i = 0; i < 3; ++i)
      for (int j = 0; j < 3; ++j) {
        if (rc && i) continue;
        if (!rc && !i) continue;
        if (i && (i == rc || i == j)) continue;
        inc(d, dp(l, r - 2, lc, j));
      }
    return d;
  }
  for (int i = 0; i < 3; ++i)
    for (int j = 0; j < 3; ++j)
      for (int k = 0; k < 3; ++k)
        for (int t = 0; t < 3; ++t) {
          if (rc && k) continue;
          if (!rc && !k) continue;
          if (t && t == rc) continue;
          if (k && (k == i || k == j)) continue;
          inc(d, 1ll * dp(l, mch[r] - 1, lc, i) * dp(mch[r] + 1, r - 1, j, t) %
                     mod);
        }
  return d;
}
int main() {
  scanf("%s", ch + 1);
  n = strlen(ch + 1);
  for (int i = 1; i <= n; ++i) {
    if (ch[i] == ')')
      mch[i] = sta[top--];
    else
      sta[++top] = i;
  }
  memset(f, -1, sizeof f);
  int ans = 0;
  for (int i = 0; i < 3; ++i)
    for (int j = 0; j < 3; ++j) inc(ans, dp(1, n, i, j));
  printf("%d\n", ans);
  return 0;
}
