#include <bits/stdc++.h>
using namespace std;
vector<int> prime;
void SieveOfEratosthenes(int n) {
  bool prme[n + 1];
  memset(prme, true, sizeof(prme));
  for (int p = 2; p * p <= n; p++) {
    if (prme[p] == true) {
      for (int i = p * p; i <= n; i += p) prme[i] = false;
    }
  }
  for (int p = 2; p <= n; p++)
    if (prme[p]) prime.push_back(p);
}
void solve() {
  long long ans = 1;
  bool first = false;
  set<char> l = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'}, f;
  string s;
  cin >> s;
  for (int i = 0; i < (int)s.length(); i++) {
    if (s[i] == '?') {
      if (i == 0)
        ans *= 9;
      else {
        ans *= 10;
      }
    } else if (l.count(s[i])) {
      if (i == 0) first = true;
      f.insert(s[i]);
    }
  }
  if (!first) {
    int x = 11;
    for (int i = 1; i <= (int)f.size(); i++) {
      ans *= (x - i);
    }
  } else {
    ans *= 9;
    int x = 11;
    for (int i = 2; i <= (int)f.size(); i++) {
      ans *= (x - i);
    }
  }
  cout << ans;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  solve();
}
