rt,代码如下:
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int Mod = 10007;
struct node {
int s0, s1;
};
stack <node> num;
stack <char> t;
string s;
int level(char x) {
if (x == '+') return 1;
if (x == '*') return 2;
return -1;
}
node res() {
node x = num.top(); num.pop();
node y = num.top(); num.pop();
node res;
char op = t.top(); t.pop();
if (op == '+') {
res.s0 = x.s0 * y.s0 % Mod;
res.s1 = (x.s1 * y.s0 % Mod + x.s0 * x.s1 % Mod + x.s1 * y.s1 % Mod) % Mod;
}
else {
res.s0 = (x.s0 * y.s0 % Mod + x.s1 * y.s0 % Mod + x.s0 * y.s1 % Mod) % Mod;
res.s1 = x.s1 * y.s1 % Mod;
}
return res;
}
int cal() {
int n = s.size();
for (int i = 0; i < n; i++) {
if (s[i] == '(') t.push(s[i]);
else if (s[i] == ')') {
while (!t.empty() && t.top() != '(') num.push(res());
t.pop();
}
else {
while (!t.empty() && level(t.top()) >= level(s[i])) num.push(res());
t.push(s[i]);
}
if (s[i] != ')' && s[i + 1] != '(') num.push({1, 1});
}
return num.top().s0;
}
signed main() {
int n; cin >> n;
cin >> s;
s = "(" + s + ")";
cout << cal();
return 0;
}