#include<iostream>
#include<stack>
using namespace std;
struct node{
    int a,b;
}s1,s2;
struct ed{
    int x,y,z;
};
stack<ed>End;
int cmp(char x){
    if(x=='('){
		return 0;
	}
    if(x=='|'){
		return 1;
	}
    if(x=='&'){
		return 2;
	}
}
int head,tail,n;
char ans[1000010],s[1000010];
stack<char>opt;
stack<node>sum;
stack<int> num;
int main(){
    cin>>s;
    for(auto now:s){
        if(now=='1'||now=='0'){
            ans[++tail]=now;
        }else if(now=='('){
            opt.push(now);
        }else if(now=='&'||now=='|'){
            while(!opt.empty()&&cmp(now)<=cmp(opt.top())){
                ans[++tail]=opt.top();
				opt.pop();
            }
            opt.push(now);
        }else if(now==')'){
            while(opt.top()!='('){
                ans[++tail]=opt.top();
                opt.pop();
            }
            opt.pop();
        }
    }
    while(!opt.empty()){
        ans[++tail]=opt.top();
        opt.pop();
    }
    for(head=1;head<=tail;head++){
        if(ans[head]=='&'){
            ed y=End.top();
            End.pop();
            ed x=End.top();
            End.pop();
            End.push((ed){x.x&y.x,x.y+(x.x==0?1:y.y),x.z+(x.x==0?0:y.z)});
        }else if(ans[head]=='|'){
            ed y=End.top();
            End.pop();
            ed x=End.top();
            End.pop();
            End.push((ed){x.x|y.x,x.y+(x.x==1?0:y.y),x.z+(x.x==1?1:y.z)});
        }else{
            End.push((ed){ans[head]-'0',0,0});
        }
    }
    cout<<End.top().x<<"\n";
    cout<<End.top().y<<" "<<End.top().z<<"\n";
}
/**************************************************************
	Problem: 2407
	User: admin
	Language: C++
	Result: Accepted
	Time:446 ms
	Memory:4036 kb
****************************************************************/