#include <bits/stdc++.h>
int dp[2005][2005];
char s[2005];
bool isop(char x) {
  switch (x) {
    case '+':
    case '-':
    case '*':
    case '/':
      return true;
  }
  return false;
}
void init_dp(int n) {
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) dp[i][j] = -1;
}
int cal(int pos, int brace, int n) {
  if (brace < 0) return 0;
  if (dp[pos][brace] != -1) return dp[pos][brace];
  if (pos == n) {
    if (brace == 0)
      dp[pos][brace] = 1;
    else
      dp[pos][brace] = 0;
  } else {
    if (isdigit(s[pos]))
      dp[pos][brace] =
          (cal(pos + 1, brace, n) + cal(pos, brace - 1, n)) % (1000003);
    else
      dp[pos][brace] = cal(pos + 1, brace + 1, n);
  }
  return dp[pos][brace];
}
int main() {
  char input[2005];
  while (scanf("%s", input) == 1) {
    int n = 0;
    bool valid = true;
    for (int i = 0; input[i]; i++)
      if (isdigit(input[i])) {
        if (n > 0 && isdigit(s[n - 1])) continue;
        s[n++] = '0';
      } else if (isop(input[i]))
        s[n++] = input[i];
      else
        valid = false;
    if (s[0] == '*' || s[0] == '/') valid = false;
    if (isdigit(s[n - 1]) == false) valid = false;
    for (int i = 1; i < n - 1; i++)
      if (isop(s[i - 1]) && (s[i] == '*' || s[i] == '/')) {
        valid = false;
        break;
      }
    if (valid == false)
      puts("0");
    else {
      s[n] = 0;
      init_dp(n + 1);
      printf("%d\n", cal(0, 0, n));
    }
  }
}
