代码:
#include<bits/stdc++.h>
using namespace std;
struct dp{int zero,one;}ans[150001];
int len,t=1;
string str;
stack<char>s;
inline void run(char ch,dp &a,dp &b){
if(ch=='+'){
a.one=(a.one*(b.zero+b.one)+a.zero*b.one)%10007;
a.zero=a.zero*b.zero%10007;
}else{
a.zero=(a.zero*(b.zero+b.one)+a.one*b.zero)%10007;
a.one=a.one*b.one%10007;
}
}
int main(){
cin>>len>>str;
str+=')';ans[1].zero=ans[1].one=1;s.push('(');
for(int i=0;i<=len;++i){
if(str[i]=='(')s.push('(');
else if(str[i]==')'){
for(;s.top()!='(';s.pop(),--t)run(s.top(),ans[t-1],ans[t]);
s.pop();
}else{
for(;s.top()<=str[i]&&s.top()!='(';s.pop(),t--)run(s.top(),ans[t-1],ans[t]);
s.push(str[i]);ans[++t].zero=ans[t].one=1;
}
}
cout<<ans[1].zero;
return 0;
}