#include<bits/stdc++.h>
using namespace std;

int P,Q,R;
char* c;

int NOT(int);
int test(void);
int Calc(void);
bool Solve(void);

int main(){
	char st[100];
	while(scanf("%s",st), st[0]!='.'){
		int ans=0;
		for(P=0;P<3;P++){
			for(Q=0;Q<3;Q++){
				for(R=0;R<3;R++){
					c=st;
					ans+=Solve();
				}
			}
		}
		cout<<ans<<endl;
	}

	return 0;
}
int NOT(int x){
	if(x==2)return 0;
	else if(x==1)return 1;
	else if(x==0)return 2;
	else{
		cout<<"??"<<endl;
		return 0;
	}
}
int Calc(){
	if(*c=='0'||*c=='1'||*c=='2')return *c-'0';
	else if(*c=='P')return P;
	else if(*c=='Q')return Q;
	else if(*c=='R')return R;
	else if(*c=='-'){
		++c;
		return NOT(Calc());
	}else if(*c=='(')return test();
}

//{{{
int test(){
	c++;
	int A=Calc();	c++;
	char op=*c;	c++;
	int B=Calc();	c++;

	if(op=='+')return max(A,B);
	else if(op=='*')return min(A,B);
}
//}}}
bool Solve(){
	stack<int> s;
	while(*c!='\0'){
		s.push(Calc());

		c++;
	}
	//printf("SIZE : %d\n",s.size());
	int ans=s.top();	s.pop();
	if(ans==2){
		//printf("(P,Q,R) : %d,%d,%d\n",P,Q,R);
		return true;
	}
	else return false;
}

