#include <bits/stdc++.h>
const int MAXN = 2000 + 5;
const int ha = 1e6 + 3;
inline void add(int &x, int y) {
  x += y - ha;
  x += x >> 31 & ha;
}
char str[MAXN];
int a[MAXN], n;
int f[2][MAXN], now;
int sm[MAXN];
int main() {
  scanf("%s", str + 1);
  int len = strlen(str + 1);
  for (int i = 1; i <= len; ++i) {
    if (str[i] == '+' || str[i] == '-')
      a[++n] = 1;
    else if (str[i] == '*' || str[i] == '/')
      a[++n] = 2;
    else {
      a[++n] = 0;
      while (isdigit(str[i])) ++i;
      --i;
    }
  }
  if (a[1] == 2 || a[n]) {
    puts("0");
    return 0;
  }
  for (int l = 1, r = 1; l <= n; l = r + 1) {
    r = l;
    if (!a[l]) continue;
    while (r + 1 <= n && a[r]) ++r;
    for (int i = l + 1; i <= r; ++i)
      if (a[i] == 2) {
        puts("0");
        return 0;
      }
  }
  f[now = 0][0] = 1;
  for (int i = 1; i <= n; ++i) {
    memset(f[now ^ 1], 0, sizeof(f[now ^ 1]));
    if (a[i] == 0) continue;
    if (a[i + 1] == 0) {
      for (int j = n; j >= 0; --j) add(f[now][j], f[now][j + 1]);
      for (int j = 0; j <= n; ++j) f[now ^ 1][j] = f[now][std::max(0, j - 1)];
    } else {
      for (int j = 1; j <= n; ++j) f[now ^ 1][j] = f[now][j - 1];
    }
    now ^= 1;
  }
  printf("%d\n", f[now][0]);
  return 0;
}
