#include #include #include #define rep(i,n) for(i=0;i<(int)(n);i++) using namespace std; typedef long long ll; typedef unsigned long long ull; string s; int c2Id(char c){ switch(c){ case '(': return 0; case '^': return 1; case '*': return 2; default: break; } return 3; } int main(){ int i,j,ans1=0,ans2=0,tmp; cin>>s; const int MAX=4; vector > sum(MAX,vector(s.length()+1,0)); vector asl; rep(i,s.length()){ sum[c2Id(s[i])][i+1]=1; if(s[i]=='*')asl.push_back(i); } rep(i,MAX)rep(j,s.length())sum[i][j+1]+=sum[i][j]; vector imos(s.length(),0); auto judge=[&](int l,int r)->bool{ return sum[c2Id('^')][r]-sum[c2Id('^')][l]>=2; }; rep(i,s.length())if(s[i]=='('){ int asl_id=lower_bound(asl.begin(),asl.end(),i)-asl.begin(); if(asl_id==asl.size())continue; asl_id=asl[asl_id]; //printf("%d %d\n",i,asl_id); int left=asl_id,right=s.length()+1,mid; while(left(s.length(),0); rep(i,s.length())if(s[i]==')'){ int asl_id=lower_bound(asl.begin(),asl.end(),i)-asl.begin(); asl_id--; if(asl_id<0)continue; asl_id=asl[asl_id]; //printf("%d %d\n",i,asl_id); int left=0,right=asl_id,mid; while(left0;i--)imos[i-1]+=imos[i]; //rep(i,s.length()-1)printf("%d ",imos[i]);printf("%d\n",imos[i]); rep(i,s.length())if(s[i]=='(')ans1+=imos[i]; printf("%d %d\n",ans1,ans2); return 0; }