#include <bits/stdc++.h>
using namespace std;
const int mod = 1000003;
char in[2010];
int catlen[2010];
long long fac[4010], inv[4010], rf[4010];
int t[2010], tc;
int first[2010], stc;
long long dp[2010][2010];
inline int solve() {
  int n = strlen(in);
  tc = 0;
  bool isn = 0, ist;
  for (int i = (0); i < (int)(n); ++i) {
    ist = 0;
    if (in[i] <= '9' && in[i] >= '0')
      isn = 1;
    else {
      if (isn) {
        t[tc++] = 0;
        isn = 0;
      }
      if (i == 0 || !(in[i - 1] <= '9' && in[i - 1] >= '0')) {
        if (in[i] == '*' || in[i] == '/') return 0;
        t[tc++] = 1;
      } else
        ist = 1;
    }
  }
  if (isn) t[tc++] = 0;
  if (t[tc - 1] == 1 || ist) return 0;
  stc = 0;
  for (int i = (0); i < (int)(tc); ++i)
    if (t[i] == 0)
      first[stc]++;
    else
      stc++;
  if (stc == 0) return catlen[tc];
  dp[stc + 1][0] = 1;
  int ms = 0;
  for (int i = (int)(stc + 1) - 1; i >= 0; --i) {
    int r = first[i];
    if (i) {
      ms += r;
      for (int j = (1); j < (int)(ms + 1); ++j) {
        for (int k = max(r - j, 0); k <= ms - j; k++) {
          dp[i][k + 1] += (dp[i + 1][k + j - r] * catlen[j]) % mod;
          if (dp[i][k + 1] >= mod) dp[i][k + 1] -= mod;
        }
      }
    } else {
      for (int j = (0); j < (int)(ms + 1); ++j) dp[i][j + r] = dp[i + 1][j];
      ms += r;
    }
  }
  int ret = 0;
  for (int i = (1); i < (int)(tc + 1); ++i)
    ret = (ret + dp[0][i] * catlen[i]) % mod;
  return ret;
}
int main() {
  inv[1] = 1;
  for (int i = 2; i <= 4000; i++)
    inv[i] = (inv[mod % i] * (mod - mod / i)) % mod;
  fac[0] = rf[0] = 1;
  for (int i = 1; i <= 4000; i++) {
    fac[i] = (fac[i - 1] * i) % mod;
    rf[i] = (rf[i - 1] * inv[i]) % mod;
  }
  catlen[1] = 1;
  for (int i = 1; i <= 2000; i++)
    catlen[i + 1] =
        (inv[i + 1] * (((fac[2 * i] * rf[i]) % mod * rf[i]) % mod)) % mod;
  scanf("%s", in);
  printf("%d\n", solve());
  return 0;
}
