#include<bits/stdc++.h>
using namespace std;
int nor, nand;
class Tree {
public:
virtual bool eval() const=0;
Tree() { };
};
class branch:public Tree {
private:
char oper;
Tree *left, *right;
public:
bool eval() const {
bool lv;
lv=left->eval();
if(oper=='|') {
if(lv==1) {
nor++;
return 1;
}
return lv|(right->eval());
}else if(oper=='&') {
if(lv==0) {
nand++;
return 0;
}
return lv&(right->eval());
}
}
branch(char o, Tree *l, Tree *r) {
oper=o, left=l, right=r;
}
branch() { }
};
class leaf:public Tree {
private:
bool val;
public:
bool eval() const {
return val;
}
leaf(bool v) {val=v; }
leaf() { }
};
leaf ret1[10000];
branch ret2[10000];
int c1=0, c2=0;
char lvmap[2]={'|', '&'};
Tree* parseIter(string s, int lv) {
if(s.length()<=2) {
cout<<s<<endl;
ret1[c1]=leaf(s[0]-'0');
return &ret1[c1++];
}
if(lv<=1) {
int st=0;
string left, right;
left.clear(), right.clear();
int i=0;
while((s[i]!=lvmap[lv] || st>0) && i<(int)s.length()) {
if(s[i]=='(')st++;
if(s[i]==')')st--;
left.push_back(s[i++]);
};
i++;
while(i<=(int)s.length()) {
right.push_back(s[i++]);
}
if(right.length()>1) {
cout<<lvmap[lv]<<" "<<left<<" "<<right<<endl;
int c=c2++;
ret2[c]=branch(lvmap[lv], parseIter(left, lv+1), parseIter(right, lv+1));
return &ret2[c];
}else {
return parseIter(left, lv+1);
}
}else if(s[0]=='(') {
string val;
val.clear();
int st=0, i=1;
while((s[i]!=')' || st>0) && i<(int)s.length()) {
if(s[i]=='(')st++;
if(s[i]==')')st--;
val.push_back(s[i++]);
};
cout<<val<<endl;
return parseIter(val, 0);
}
cout<<s<<endl;
}
int main() {
string s;
cin>>s;
Tree *root=parseIter(s, 0);
cout<<root->eval()<<endl<<nand<<" "<<nor;
return 0;
}