#include<stdio.h>
int P,Q,R;
int Not(int x){
    if(x==0) return 2;
    else if(x==1) return 1;
    else return 0;
}
int seki(int x,int y){
    if(x==0||y==0) return 0;
    else if(x==1||y==1) return 1;
    else return 2;
}
int wa(int x,int y){
    if(x==2||y==2) return 2;
    else if(x==1||y==1) return 1;
    else return 0;
}
int eval_pos;                   // 現在処理中の論理式の位置
int eval(char *str){
    char token;                 // これから処理する文字
    unsigned short v1, v2;                 // 引数の値
    token = str[eval_pos++];    // １文字取得
    switch(token){
        case '0':                   // 定数 0
            return 0;
        case '1':                   // 定数 1
            return 1;
        case '2':                   // 定数 2
            return 2;
        case 'P':
            return P;
        case 'Q':
            return Q;
        case 'R':
            return R;
        case '-':                   // 論理否定
            v1 = eval(str);         // 引数の値を求める
            return Not(v1);
        case '(':                   // 左括弧開始
            v1 = eval(str);                 // 第一引数の値を求める
            if(str[eval_pos++]=='+'){       // EXOR演算
                v2 = eval(str);             // 第二引数の値を求める
                if(str[eval_pos++] != ')')
                    fprintf(stderr, "missing ) for ^\n");   // 文法誤り
                return wa(v1,v2);             // EXOR演算を適用
            }
            else {                          // 論理積演算
                v2 = eval(str);             // 第二引数の値を求める
                if(str[eval_pos++] != ')')
                    fprintf(stderr, "missing ) for ^\n");   // 文法誤り
                return seki(v1,v2);             // 論理積演算を適用
            }
        default:
            break;
    }
    return 0;
}
int value(char *str){
    eval_pos = 0;
    return eval(str);
}
int main(void){
    while(1){
        char buff[90];
        fgets(buff,85,stdin);
        if(buff[0]=='.') break;
        int count=0;
        for(int i=0;i<=2;i++){
            for(int j=0;j<=2;j++){
                for(int k=0;k<=2;k++){
                    P=i,Q=j,R=k;
                    if(value(buff)==2) count++;
                }
            }
        }
        printf("%d\n",count);
    }
}

