#include <bits/stdc++.h>
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);
    char c = s[pos++];
    int b = eval(s, pos);
    ++pos;
    if (c == '*') {
      return (a * b + 1) / 2;
    }
    if (c == '+') {
      return max(a, b);
    }
    cout << s[pos];
    abort();
  }
  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;
}
