#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e18;
char s[100], t[100], a[] = "=()+*-01";
int flag, R[100], sta[100];
int n, cnt[100], ans;
int b[100];
void Init() {
  int i;
  scanf("%s", s);
  n = strlen(s);
  for (i = 0; i < n; ++i) {
    if (s[i] >= 'a' && s[i] <= 'z') {
      if (cnt[s[i] - 'a' + 1] == 0) ++cnt[0];
      ++cnt[s[i] - 'a' + 1];
    } else if (s[i] >= 'A' && s[i] <= 'Z') {
      if (cnt[s[i] - 'A' + 27] == 0) ++cnt[0];
      ++cnt[s[i] - 'A' + 27];
    } else if (s[i] == '=')
      ++flag;
  }
}
long long Calc(int l, int r) {
  if (l > r || l >= n) return INF;
  int i, q[100] = {}, d = 0;
  long long a = INF;
  char c, pre = 0;
  for (i = l; i <= r; ++i) {
    if (s[i] >= 'a' && s[i] <= 'z')
      c = t[s[i] - 'a' + 1];
    else if (s[i] >= 'A' && s[i] <= 'Z')
      c = t[s[i] - 'A' + 27];
    else
      c = s[i];
    if (c == '(') {
      if (pre == '1' || pre == '0') return INF;
      a = Calc(i + 1, R[i] - 1);
      if (a == INF) return INF;
      i = R[i];
      if (i > r) return INF;
    } else if (c == '+') {
      if (a == INF) return INF;
      if (d == 0) {
        q[++q[0]] = a;
      } else if (d == 1) {
        q[++q[0]] = -a;
      } else {
        q[q[0]] *= a;
      }
      a = INF;
      d = 0;
    } else if (c == '-') {
      if (a == INF)
        d ^= 1;
      else {
        if (d == 0) {
          q[++q[0]] = a;
        } else if (d == 1) {
          q[++q[0]] = -a;
        } else {
          q[q[0]] *= a;
        }
        a = INF;
        d = 1;
      }
    } else if (c == '*') {
      if (a == INF) return INF;
      if (d == 0) {
        q[++q[0]] = a;
      } else if (d == 1) {
        q[++q[0]] = -a;
      } else {
        q[q[0]] *= a;
      }
      a = INF;
      d = 2;
    } else {
      if (pre == '(') return INF;
      if (a == INF)
        a = c - '0';
      else {
        if (a == 0) return INF;
        a = a * 2 + c - '0';
      }
    }
    pre = c;
  }
  if (a == INF) return INF;
  if (d == 0) {
    q[++q[0]] = a;
  } else if (d == 1) {
    q[++q[0]] = -a;
  } else {
    q[q[0]] *= a;
  }
  for (i = 1, a = 0; i <= q[0]; ++i) a += q[i];
  return a;
}
void Check() {
  int i, j;
  long long res1, res2;
  for (i = 0, sta[0] = 0; i < n; ++i) {
    R[i] = -1;
    if (s[i] >= 'a' && s[i] <= 'z' && t[s[i] - 'a' + 1] == '(')
      sta[++sta[0]] = i;
    else if (s[i] >= 'A' && s[i] <= 'Z' && t[s[i] - 'A' + 27] == '(')
      sta[++sta[0]] = i;
    else if (s[i] == '(')
      sta[++sta[0]] = i;
    if (s[i] >= 'a' && s[i] <= 'z' && t[s[i] - 'a' + 1] == ')') {
      if (!sta[0]) return;
      R[sta[sta[0]--]] = i;
    } else if (s[i] >= 'A' && s[i] <= 'Z' && t[s[i] - 'A' + 27] == ')') {
      if (!sta[0]) return;
      R[sta[sta[0]--]] = i;
    } else if (s[i] == ')') {
      if (!sta[0]) return;
      R[sta[sta[0]--]] = i;
    }
  }
  if (sta[0]) return;
  for (i = 0; i < n; ++i) {
    if (s[i] >= 'a' && s[i] <= 'z' && t[s[i] - 'a' + 1] == '=') {
      j = i;
    } else if (s[i] >= 'A' && s[i] <= 'Z' && t[s[i] - 'A' + 27] == '=') {
      j = i;
    } else if (s[i] == '=') {
      j = i;
    }
  }
  res1 = Calc(0, j - 1);
  res2 = Calc(j + 1, n - 1);
  if (res1 == INF || res2 == INF) return;
  if (res1 == res2) {
    ++ans;
  }
}
void DFS(int i) {
  if (cnt[0] > 8 - i) return;
  if (i >= 8) {
    if (cnt[0] == 0) Check();
    return;
  }
  if (i == 0) {
    if (flag)
      b[i] = 0, DFS(i + 1);
    else {
      for (int j = 1; j <= 52; ++j) {
        if (cnt[j] != 1) continue;
        t[j] = '=';
        --cnt[0];
        b[i] = j, DFS(i + 1);
        t[j] = 0;
        ++cnt[0];
      }
    }
  } else {
    b[i] = 0, DFS(i + 1);
    for (int j = 1; j <= 52; ++j) {
      if (!cnt[j] || t[j] != 0) continue;
      t[j] = a[i];
      --cnt[0];
      b[i] = j, DFS(i + 1);
      t[j] = 0;
      ++cnt[0];
    }
  }
}
int main() {
  Init();
  if (flag > 1 || cnt[0] > 8 - flag) {
    printf("0\n");
    return 0;
  }
  DFS(0);
  printf("%d\n", ans);
  return 0;
}
