#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
#include <string>
#include <climits>
using namespace std;

#define REP(i,a,n) for(i=(a); i<(int)(n); ++i)
#define rep(i,n) REP(i,0,n)
#define DEB 0

int add(int x, int y){ return max(x,y); }
int imul(int x, int y){ return min(x,y); }
int inv(int x){ return 2-x; }

int p,q,r;

int parse(string in){

  //printf("init:%s\n",in.c_str());

  switch(in[0]){
  case '0': case '1': case '2':
    return in[0]-'0';
  case 'P': return p;
  case 'Q': return q;
  case 'R': return r;
  case '-': return inv(parse(in.substr(1)));
  case '(':
    int x=0;
    int idx=1;
    for(;idx<in.size();idx++){
      if( in[idx]=='(' )x++;
      if( in[idx]==')' )x--;
      if( x==0 && (in[idx]=='*' || in[idx]=='+') )break;
    }
    //printf("idx:%d\n",idx);
    if( in[idx]=='*' ){
      //printf("%d\n",idx);
      return imul(parse(in.substr(1,idx-1)), parse(in.substr(idx+1)));
    }else{
      return add(parse(in.substr(1,idx-1)), parse(in.substr(idx+1)));
    }
  }
}

int main(){
  string in;
  while(cin>>in, in!="."){
    int ans = 0;
    for(p=0; p<=2; p++){
      for(q=0; q<=2; q++){
	for(r=0; r<=2; r++){
	  if( parse(in)==2 )ans++;
	}
      }
    }
    printf("%d\n",ans);
  }
  return 0;
}