样例通不过
#include<bits/stdc++.h>
using namespace std;
string s;
int rp(int x){
if(s[x]!='(') return x;
int cnt=0;
for(int i=x;i<s.length();i++){
if(s[x]=='(') cnt++;
else if(s[x]==')') cnt--;
if(!cnt) return i;
}
return x;
}
int lp(int x){
if(s[x]!=')') return x;
int cnt=0;
for(int i=x;i>=0;i--){
if(s[x]=='(') cnt++;
else if(s[x]==')') cnt--;
if(cnt==0) return i;
}
return x;
}
void init(){
for(int i=0;i<s.length();i++){
if(s[i]=='&'){
int l=lp(i-1),r=rp(i+1);
if((!l||s[l-1]!='(')||(r+1>=s.length()||s[r+1]!=')')){
s.insert(l,"(");
r++;
s.insert(r+1,")");
i++;
}
}
}
for(int i=0;i<s.length();i++){
if(s[i]=='|'){
int l=lp(i-1),r=rp(i+1);
if((!l||s[l-1]!='(')||(r+1>=s.length()||s[r+1]!=')')){
s.insert(l,"(");
r++;
s.insert(r+1,")");
i++;
}
}
}
}
int andc,orc;
int calc(int a,int b){
if(b-a==1) return (a=='0'?0:1);
if(rp(a+1)==b-2) return calc(a+1,b-1);
int op=rp(a+1)+1;
int end=rp(op+1);
int first=calc(a+1,op);
if(first==0&&s[op]=='&'){andc++;return 0;}
if(first==1&&s[op]=='|'){orc++;return 1;}
int second=calc(op+1,end+1);
if(s[op]=='&') return first&second;
else return first|second;
}
void solve(){
init();
cout<<calc(0,s.length())<<endl;
cout<<andc<<" "<<orc<<endl;
}
int main(){
cin>>s;
solve();
return 0;
}