#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <numeric>
#include <cstdio>
#include <string>
#include <vector>
#include <math.h>
#include <cmath>
#include <deque>
#include <queue>
#include <map>
#include <set>
using namespace std;
#define mp make_pair
#define pb push_back
#define ll long long
#define MOD 1000000007
int dp[705][705][3][3];
int p[705], q[705];
int dfs(int l, int r, int cl, int cr) {
int &ret = dp[l][r][cl][cr];
if (ret != -1) {
return ret;
}
if (l > r) {
return ret = 1;
}
int k = p[l];
ret = 0;
for (int v = 1; v < 3; v++) {
if (k < r || cr != v) {
ret = (ret + (ll)dfs(l + 1, k - 1, 0, v) * dfs(k + 1, r, v, cr)) % MOD;
}
if (v != cl) {
ret = (ret + (ll)dfs(l + 1, k - 1, v, 0) * dfs(k + 1, r, 0, cr)) % MOD;
}
}
return ret;
}
int main() {
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
char s[705];
scanf("%s", s);
for (int i = 0, j = 0; s[i]; i++) {
if (s[i] == '(') {
q[j++] = i;
} else {
p[q[--j]] = i;
}
}
memset(dp, -1, sizeof(dp));
printf("%d\n", dfs(0, strlen(s) - 1, 0, 0));
return 0;
}