#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6 + 5;
int ck;
char s[N],a[N];
int rk[200];
stack<int> num;
stack<char> op;
int son[N][2];
void cz(){
int y=num.top();num.pop();
int x=num.top();num.pop();
a[ck]=op.top();op.pop();
son[ck][0]=x;
son[ck][1]=y;
num.push(ck);
}
int cnt1,cnt2;
int dfs(int u){
if(a[u]'0') return 0;
if(a[u]'1') return 1;
if(a[u]=='&'){
if(dfs(son[u][0])==0){
cnt1;
return 0;
}
return dfs(son[u][1]);
}
if(dfs(son[u][0])1){
cnt2++;
return 1;
}
return dfs(son[u][1]); 链接描述
}
int main(){
rk['|']=1;rk['&']=2;
scanf("%s",s+1);
int n=strlen(s+1);
for(int i=1;i<=n;i++){
if(s[i]'(')op.push(s[i]);
else if(s[i]')'){
while(op.top()!='('){
cz();
}
op.pop();
}
else if(s[i]'&'){
while(op.size()>0&&rk[op.top()]>=rk[s[i]]){
cz();
}
op.push(s[i]);
}
else if(s[i]=='|'){
while(op.size()>0&&rk[op.top()]>=rk[s[i]]){
cz();
}
op.push(s[i]);
}
else{
a[++ck]=s[i];
num.push(ck);
}
}
while(op.size()){
cz();
}
int ans=dfs(ck);
cout<<ans<<"\n"<<cnt1<<" "<<cnt2<<endl;
return 0;
}
链接描述