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


int eval(const 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; int v = eval(s, pos); return 2 - v;}
	if(s[pos] == '(') {
		++pos;
		int a = eval(s,pos);
		// evalの値には計算済みの値が帰ってくるはずだ
		char c = s[pos++];
		int b = eval(s,pos);
		++pos;
		if(c == '*') {return (a * b + 1) / 2; }
		if(c == '+') {return max(a, b); }
	}
	return 2;
}



int main (void)
{
	while(true)
	{
		string s, temp;
		cin >> s;
		if(s == ".") break;
		string p, q, r;
		int count = 0;
		int pos;
		
		for(int j = 0; j < 3; j++){
			if(j == 0) p = '0'; if(j == 1) p = '1'; if(j == 2) p = '2';
			for(int k = 0; k < 3; k++){
				if(k == 0) q = '0'; if(k == 1) q = '1'; if(k == 2) q = '2';
				for(int l = 0; l < 3; l++){
					if(l == 0) r = '0'; if(l == 1) r = '1'; if(l == 2) r = '2';
					temp = s;
					pos = 0;
					for(int i = 0; i < s.length(); i++){
						if(s.at(i) == 'P') { temp.replace(i, 1, p); }
						if(s.at(i) == 'Q') { temp.replace(i, 1, q); }
						if(s.at(i) == 'R') { temp.replace(i, 1, r); }
					}
					if(eval(temp, pos) == 2) count++;
				}
			}
		}
		cout << count << endl;
	}
	return 0;
}
