#include <iostream>
#include <cmath>
using namespace std;
string s;
long long andsum,orsum;
long long sumlast[1000005];
int find(char ch,int l,int r){
unsigned long long res=0;
for(long long i=r;i>=l;i--){
if(s[i]==')')res++;
if(s[i]=='(')res--;
//if(res<0)return -1;
if(s[i]==ch&&res==0)return i;
}
return -1;
}
int dfs(long long l,long long r){
//cout<<"dfsed "<<l<<" "<<r;
//if(!kuohaopipei(l,r)){cout<<"aisdygqiufyg";}
/*if(s[l]=='('&&s[r]==')'&&kuohaopipei2(l,r)){
//if(l==ll)ll++;
//if(r==rr)rr--;
int ret=dfs(l+1,r-1);
return ret;
}*/
if(l==r)return s[l]-'0';
if(l>r){
cout<<"aaaaaa"<<r;
return -2;
}
long long fff;
char wf;
if(sumlast[r]!=0){
fff=sumlast[r];
}
else{
fff=find('|',l,r);
if(fff==-1){
fff=find('&',l,r);
if(fff!=-1){
wf='&';
}
else{
if(s[l]=='('&&s[r]==')'){
return dfs(l+1,r-1);
}
}
}
else{
wf='|';
}
}
//cout<<" find:"<<fff<<endl;
int dfl,dfr;
dfl=dfs(l,fff-1);
//if(l==0&&r==4)cout<<wf;
//if(l==1&&r==3)cout<<"sd"<<dfl<<" "<<dfr<<"gf";
//if(l==1&&r==3)cout<<wf<<"kzisgviys";
if(wf=='|'){
//cout<<"dd"<<dfl<<"w";
if(dfl==1){
orsum++;
return 1;
}
else{
dfr=dfs(fff+1,r);
return dfl|dfr;
}
}
if(wf=='&'){
if(dfl==0){
andsum++;
return 0;
}
else{
dfr=dfs(fff+1,r);
return dfl𝔡
}
}
return -1;
}
signed main(){
cin>>s;
//cout<<kuohaopipei();return 0;
cout<<dfs(0,s.length()-1)<<endl<<andsum<<" "<<orsum;
return 0;
}
我感觉是O(n)