#include <bits/stdc++.h>
using namespace std;
int f[701][701][3][3], match[701];
char s[701];
bool adj(int a, int b) { return a == 0 || b == 0 || a != b; }
bool cal(int a, int b) { return (a * b == 0) && (a + b); }
int fun(int l, int r, int a, int b) {
  if (l + 1 == r) return cal(a, b);
  int &ret = f[l][r][a][b];
  if (ret + 1) return ret;
  ret = 0;
  if (match[l] == r) {
    if (!cal(a, b)) return ret = 0;
    for (int i = 0; i < 3; i++)
      for (int j = 0; j < 3; j++)
        if (adj(a, i) && adj(b, j))
          ret += fun(l + 1, r - 1, i, j), ret %= 1000000007;
    return ret;
  }
  int mid = match[l];
  for (int i = 0; i < 3; i++)
    for (int j = 0; j < 3; j++)
      if (adj(i, j) && cal(a, i))
        ret +=
            (long long)fun(l, mid, a, i) * fun(mid + 1, r, j, b) % 1000000007,
            ret %= 1000000007;
  return ret;
}
int main() {
  int k, T, i, j, m, n;
  while (~scanf("%s", s)) {
    n = strlen(s);
    memset(match, -1, sizeof(match));
    for (i = 0; i < n - 1; i++)
      if (s[i] == '(') {
        match[i] = i;
        j = 1;
        while (j) {
          ++match[i];
          if (s[match[i]] == '(')
            j++;
          else
            j--;
        }
      }
    memset(f, -1, sizeof(f));
    int ans = 0;
    for (i = 0; i < 3; i++)
      for (j = 0; j < 3; j++) ans += fun(0, n - 1, i, j), ans %= 1000000007;
    printf("%d\n", ans);
  }
  return 0;
}
