#include <bits/stdc++.h>
using namespace std;
const int N = 2000;
const int NN = N + 100;
const int MOD = 1000003;
char chl[NN], chr[NN];
long long ans[NN][NN];
bool vis[NN][NN];
int l;
bool isMul(char c) { return c == '*' || c == '/'; }
bool isAdd(char c) { return c == '+' || c == '-'; }
void change() {
  l = 1;
  int len = strlen(chl);
  chr[0] = 0;
  assert(0 < len && len <= N);
  for (int i = 0, j = 0; i < len + 1; ++i) {
    if (i < len) assert(isdigit(chl[i]) || isAdd(chl[i]) || isMul(chl[i]));
    if (i < len && isdigit(chl[i]))
      ++j;
    else {
      if (j) j = 0, chr[l++] = '1';
      if (i < len) chr[l++] = isAdd(chl[i]) ? '-' : '*';
    }
  }
  chr[l] = 0;
  --l;
}
bool isTooManyMulOp() {
  for (int i = 1; i < l; ++i)
    if (i + 1 <= l)
      if ((isAdd(chr[i]) || isMul(chr[i])) && isMul(chr[i + 1])) return true;
  if (isAdd(chr[l]) || isMul(chr[l])) return true;
  if (isMul(chr[1])) return true;
  return false;
}
long long dp() {
  ans[0][0] = 1;
  for (int i = 1; i <= l; ++i) {
    if (chr[i] != '1') {
      ans[i][0] = 0;
      for (int j = 1; j <= l; ++j) ans[i][j] = ans[i - 1][j - 1];
    } else {
      for (int j = 0; j <= l; ++j) ans[i][j] = ans[i - 1][j];
      if (i > 1) {
        for (int j = l - 1; j >= 0; --j) {
          ans[i][j] += ans[i][j + 1];
          if (ans[i][j] >= MOD) ans[i][j] -= MOD;
        }
      }
    }
  }
  return ans[l][0];
}
void solve() {
  scanf("%s", chl);
  change();
  if (isTooManyMulOp()) {
    puts("0");
    return;
  }
  memset(vis, false, sizeof(vis));
  printf("%lld", dp());
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  solve();
  return 0;
}
