#include <bits/stdc++.h>
using namespace std;
char NOT(char a) {
  if (a == '0') return '2';
  if (a == '1') return '1';
  return '0';
}
char OR(char a, char b) {
  if (a == '0' && b == '0') return '0';
  if (a == '2' || b == '2') return '2';
  return '1';
}
char AND(char a, char b) {
  if (a == '2' && b == '2') return '2';
  if (a == '0' || b == '0') return '0';
  return '1';
}
char Check(int x, int y, int z, string s) {
  for (int i = 0; i < s.length(); i++) {
    if (s[i] == 'P') s[i] = '0' + x;
    if (s[i] == 'Q') s[i] = '0' + y;
    if (s[i] == 'R') s[i] = '0' + z;
  }
  char a, b, c;
  stack<char> S;
  for (int i = 0; i < s.length(); i++) {
    if (s[i] == '0' || s[i] == '1' || s[i] == '2') {
      S.push(s[i]);
      while (1) {
        if (S.size() == 1) break;
        a = S.top();
        S.pop();
        c = S.top();
        if (c == '(') {
          S.push(a);
          break;
        }
        S.pop();
        if (c == '+') {
          b = S.top();
          S.pop();
          S.push(OR(b, a));
        } else if (c == '*') {
          b = S.top();
          S.pop();
          S.push(AND(b, a));
        } else {
          S.push(NOT(a));
        }
      }
    } else if (s[i] == ')') {
      while (1) {
        a = S.top();
        S.pop();
        c = S.top();
        S.pop();
        if (c == '(') {
          S.push(a);
          break;
        } else if (c == '+') {
          b = S.top();
          S.pop();
          S.push(OR(b, a));
        } else if (c == '*') {
          b = S.top();
          S.pop();
          S.push(AND(b, a));
        } else {
          S.push(NOT(a));
        }
      }
    } else
      S.push(s[i]);
  }
  return S.top();
}
int main() {
  string s;
  int ans;
  while (1) {
    cin >> s;
    if (s[0] == '.') break;
    ans = 0;
    s = '(' + s + ')';
    for (int i = 0; i < 3; i++) {
      for (int j = 0; j < 3; j++) {
        for (int k = 0; k < 3; k++) {
          if (Check(i, j, k, s) == '2') ans++;
        }
      }
    }
    cout << ans << endl;
  }
  return 0;
}
