#include <bits/stdc++.h>
using namespace std;
long long data[1024][1024][3][3];
int modata = 1000000007;
void match(int* data, string bracket) {
  int sizes = bracket.length();
  int leftIndex[sizes];
  int index = 0;
  for (int i = 0; i < sizes; i++) {
    if (bracket[i] == '(')
      leftIndex[index++] = i;
    else {
      index--;
      data[i] = leftIndex[index];
      data[leftIndex[index]] = i;
    }
  }
}
void paint(int* matcher, int left, int right) {
  if (right - left == 1) {
    data[left][right][0][1] = 1;
    data[left][right][0][2] = 1;
    data[left][right][1][0] = 1;
    data[left][right][2][0] = 1;
  } else if (matcher[left] == right) {
    paint(matcher, left + 1, right - 1);
    for (int i = 0; i < 3; i++) {
      for (int j = 0; j < 3; j++) {
        if (j != 1)
          data[left][right][0][1] =
              (data[left][right][0][1] + data[left + 1][right - 1][i][j]) %
              modata;
        if (j != 2)
          data[left][right][0][2] =
              (data[left][right][0][2] + data[left + 1][right - 1][i][j]) %
              modata;
        if (i != 1)
          data[left][right][1][0] =
              (data[left][right][1][0] + data[left + 1][right - 1][i][j]) %
              modata;
        if (i != 2)
          data[left][right][2][0] =
              (data[left][right][2][0] + data[left + 1][right - 1][i][j]) %
              modata;
      }
    }
  } else {
    int leftMatch = matcher[left];
    paint(matcher, left, leftMatch);
    paint(matcher, leftMatch + 1, right);
    for (int i = 0; i < 3; i++) {
      for (int j = 0; j < 3; j++) {
        for (int k = 0; k < 3; k++) {
          for (int l = 0; l < 3; l++) {
            if (!((k == 1 && l == 1) || (k == 2 && l == 2)))
              data[left][right][i][j] = (data[left][right][i][j] +
                                         (data[left][leftMatch][i][k] *
                                          data[leftMatch + 1][right][l][j]) %
                                             modata) %
                                        modata;
          }
        }
      }
    }
  }
}
int main() {
  string bracket;
  cin >> bracket;
  const int lens = bracket.length();
  int matcher[lens];
  memset(data, 0, sizeof(data));
  int ans = 0;
  match(matcher, bracket);
  paint(matcher, 0, lens - 1);
  for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
      ans = (ans + data[0][lens - 1][i][j]) % modata;
    }
  }
  cout << ans << endl;
  return 0;
}
