#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

// 'P', 'Q', 'R' ツづー '1', '2', '3' ツづ可置ツつォツ環キツつヲツづゥ
void PQR_change(string& s ,char p , char q , char r ){
	for(int i=0 ; i < s.size() ; i++ ){
		if( s[i] == 'P' ) s[i] = p;
		if( s[i] == 'Q' ) s[i] = q;
		if( s[i] == 'R' ) s[i] = r;
	}
}

// "--"(ツ連ツ堕アツつキツづゥ2ツづつづ個マツイツナツス) ツづー "" ツづ可置ツつォツ環キツつヲツづゥ
void minus_erace(string& s){
	for(int i=1 ; i < s.size() ; i++ ){
		if( s[i] == '-' && s[i-1] == '-' ){
			s.erase( i-1 , 2 );
			i = 0;
		}
	}
}

int eval(string s, int& pos){
	if( s[pos] == '0' ){ pos++; return 0; }
	if( s[pos] == '1' ){ pos++; return 1; }
	if( s[pos] == '2' ){ pos++; return 2; }
	if( s[pos] == '-' ){ pos++; return 2 - eval(s,pos) ; }
	if (s[pos] == '(') { 
		++pos; 
		int a = eval(s, pos);
		char c = s[pos++];
		int b = eval(s, pos);
		++pos;
		if( c == '*' ){
			return (a * b + 1) / 2;
		}else if( c == '+' ){
			return max(a, b);
		}
	}
}

int main(){
	string s;
	while( cin >> s , s != "." ){
		int ans = 0;
		for(char p = '0' ; p <= '2' ; p++ ){
			for(char q = '0' ; q <= '2' ; q++ ){
				for(char r = '0' ; r <= '2' ; r++ ){
					string ex = s;
					// 'P', 'Q', 'R' ツづー '1', '2', '3'ツづ可置ツつォツ環キツつヲツづゥ
					PQR_change( ex , p , q , r );
					// "--"(ツ連ツ堕アツつキツづゥ2ツづつづ個マツイツナツス) ツづー ""ツづ可置ツつォツ環キツつヲツづゥ
					minus_erace( ex );
					
					// ツ篠ョツづ個評ツ可ソ
					int t=0;
					int val = eval( ex , t );
					if( val == 2 ){
						ans++;
					}
				}
			}
		}
		cout << ans << endl;
	}	
}