#include <bits/stdc++.h>
#define MOD 1000000007
int evaluateExp(string &exp) {
int n = exp.size();
vector<vector<vector<int>>> dp(n, vector<vector<int>>(n, vector<int>(2, 0)));
for (int i = 0; i < n; ++i) {
if (exp[i] == 'T') {
dp[i][i][1] = 1;
dp[i][i][0] = 0;
} else if (exp[i] == 'F') {
dp[i][i][0] = 1;
dp[i][i][1] = 0;
}
}
for (int len = 2; len <= n; len++) {
for (int i = 0; i <= n - len; i++) {
int j = i + len - 1;
for (int k = i + 1; k < j; k += 2) {
int LT = dp[i][k - 1][1];
int LF = dp[i][k - 1][0];
int RT = dp[k + 1][j][1];
int RF = dp[k + 1][j][0];
if (exp[k] == '&') {
dp[i][j][1] = (dp[i][j][1] + 1LL * LT * RT % MOD) % MOD;
dp[i][j][0] = (dp[i][j][0] + 1LL * LT * RF % MOD +
1LL * LF * RT % MOD + 1LL * LF * RF % MOD) %
MOD;
}
if (exp[k] == '|') {
dp[i][j][1] = (dp[i][j][1] + 1LL * LT * RT % MOD +
1LL * LT * RF % MOD + 1LL * RT * LF % MOD) %
MOD;
dp[i][j][0] = (dp[i][j][0] + 1LL * LF * RF % MOD) % MOD;
}
if (exp[k] == '^') {
dp[i][j][1] =
(dp[i][j][1] + 1LL * LT * RF % MOD + 1LL * RT * LF % MOD) % MOD;
dp[i][j][0] =
(dp[i][j][0] + 1LL * LF * RF % MOD + 1LL * RT * LT % MOD) % MOD;
}
}
}
}
return dp[0][n - 1][1];
}