#include <bits/stdc++.h>
using namespace std;
string s;
long long memo[3][710][710][3];
long long dp(int pc, int st, int en, int nc) {
  if (en < st) return 1;
  if (s[st] == ')' || st == en) return 0;
  if (memo[pc][st][en][nc] != -1) return memo[pc][st][en][nc];
  long long w = 0;
  stack<char> STK;
  for (int i = st + 1; i <= en; i++) {
    if (s[i] == ')' && STK.empty()) {
      if (i != en || nc != 1)
        w += dp(0, st + 1, i - 1, 1) * dp(1, i + 1, en, nc);
      w %= 1000000007;
      ;
      if (i != en || nc != 2)
        w += dp(0, st + 1, i - 1, 2) * dp(1, i + 1, en, nc);
      w %= 1000000007;
      ;
      if (pc != 1) w += dp(1, st + 1, i - 1, 0) * dp(0, i + 1, en, nc);
      w %= 1000000007;
      ;
      if (pc != 2) w += dp(2, st + 1, i - 1, 0) * dp(0, i + 1, en, nc);
      w %= 1000000007;
      ;
      break;
    } else if (s[i] == '(')
      STK.push('(');
    else if (s[i] == ')' && STK.top() == '(')
      STK.pop();
  }
  return memo[pc][st][en][nc] = w % 1000000007;
  ;
}
int main() {
  cin >> s;
  memset(memo, -1, sizeof(memo));
  cout << dp(0, 0, s.size() - 1, 0) << endl;
  return 0;
}
