#include <iostream>
#include <cstring>
#include <stack>
using namespace std;
int len, p[705], dp[70][70][3][3];
string s;
stack <int> st;
const int mod = 1000000007;
void dfs(int l, int r) {
if(l + 1 == r) {
dp[l][r][0][2] = dp[l][r][2][0] = dp[l][r][0][1] = dp[l][r][1][0] = 1;
return;
} else if(p[l] == r) {
dfs(l + 1, r - 1);
for(int i = 0; i <= 2; i++) {
for(int j = 0; j <= 2; j++) {
if(i != 1) dp[l][r][1][0] = (dp[l][r][1][0] + dp[l + 1][r - 1][i][j]) % mod;
if(j != 1) dp[l][r][0][1] = (dp[l][r][0][1] + dp[l + 1][r - 1][i][j]) % mod;
if(i != 2) dp[l][r][2][0] = (dp[l][r][2][0] + dp[l + 1][r - 1][i][j]) % mod;
if(j != 2) dp[l][r][0][2] = (dp[l][r][0][2] + dp[l + 1][r - 1][i][j]) % mod;
}
}
} else {
dfs(l, p[l]);
dfs(p[l] + 1, r);
for(int i = 0; i <= 2; i++) {
for(int j = 0; j <= 2; j++) {
for(int k = 0; k <= 2; k++) {
for(int x = 0; x <= 2; x++) {
if((j == 2 && x == 2) || (j == 1 && x == 1)) continue;
dp[l][r][i][x] = (dp[l][r][i][x] + dp[l][p[l]][i][j] * dp[p[l] + 1][r][k][x]) % mod;
}
}
}
}
}
}
int main() {
cin >> s;
len = s.size();
s = ' ' + s;
for(int i = 1; i <= len; i++) {
if(s[i] == '(') {
st.push(i);
} else if(s[i] == ')') {
p[st.top()] = i;
p[i] = st.top();
st.pop();
}
}
dfs(1, len);
int ans = 0;
for(int i = 0; i <= 2; i++) {
for(int j = 0; j <= 2; j++) {
cout << dp[1][len][i][j] << " ";
ans = (ans + dp[1][len][i][j]) % mod;
}
cout << endl;
}
cout << ans;
}
求各位帮我解答一下到底错哪了,万分感谢!!