#include #include /*多倍長整数 #include #include namespace mp = boost::multiprecision; // 任意長整数型 using Bint = mp::cpp_int; //仮数部が10進数で1024桁の浮動小数点数型(TLEしたら小さくする) using Real = mp::number>; */ using namespace std; using namespace atcoder; using ll=long long; using ull=unsigned long long; using ld=long double; using mint=modint998244353; using mint2=modint1000000007; //任意modint using mint3=static_modint<1000000000>; using P=pair; const ll INF=1e17; const vector dx={0,0,1,-1,1,1,-1,-1}; const vector dy={1,-1,0,0,1,-1,-1,1}; const vector dirs={'>','<','v','^'}; #define rep(i,N) for(ll i=0;i ostream& operator<<(ostream &os,pair &pai){ return os<<"("< ostream& operator<<(ostream &os,vector vec){ for(auto val:vec){ os< istream& operator>>(istream &is,vector &vec){ for(int i=0;i<(int)vec.size();i++){ is>>vec[i]; } return is; } template istream& operator>>(istream &is,pair &pai){ is>>pai.first>>pai.second; return is; } void set_cout(){ cout< void print(const T &vec){ int i=0; for(auto val:vec){ cout< void print2(const vector> &vec){ int i=0; for(auto v:vec){ cout< void chmin(T &a,T b){ if(a>b){ a=b; } return; } template void chmax(T &a,T b){ if(a(const ob3 &o) const{ return a>o.a; } }; struct ob4{ ll a,b,c,d; friend auto operator<=>(const ob4&,const ob4&)=default; }; int main(){ cin.tie(0)->sync_with_stdio(0); int N; cin>>N; string S; cin>>S; vector comp(N); rep(i,N){ if(S[i]=='+'){ comp[i]=2; }else if(S[i]=='0'){ comp[i]=1; }else{ comp[i]=0; } } vector> dp(N,vector(3,0)); dp[0][comp[0]]=1; for(int i=1;i