#include #include #include using namespace std; constexpr long long M = 1e9+7, OPEN=-1, CLOSE=-2; using I = vector::iterator; long long dfs(I begin, I end, bool op){ assert(*begin == OPEN and *end == CLOSE); long long v = op?0:1; for(++begin;begin!=end; ++begin){ if(*begin == CLOSE) assert(false); long long x; if(*begin == OPEN){ auto s = begin; int cnt = 1; while(cnt){ ++begin; if(*begin == OPEN) ++cnt; if(*begin == CLOSE) --cnt; } x = dfs(s, begin, !op); } else { x = *begin; } if(op) v = (v+x)%M; else v = v*x%M; } return v; } int main(){ int n; cin >> n; vector l; l.push_back(OPEN); for(int i = 0; i < n; ++i){ string s; cin >> s; if(s == "(") l.push_back(OPEN); else if(s == ")") l.push_back(CLOSE); else l.push_back(stoll(s)); } l.push_back(CLOSE); cout << dfs(begin(l), prev(end(l)), true) << endl; }