#include <bits/stdc++.h>
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
const int MAXN = 2000 + 5;
const int ha = 1e6 + 3;
char str[MAXN];
int a[MAXN];
int n;
int f[MAXN][MAXN], g[MAXN][MAXN];
int main() {
  scanf("%s", str + 1);
  int len = strlen(str + 1);
  for (register int i = 1; i <= len; ++i) {
    if (isdigit(str[i])) {
      a[++n] = 0;
      while (isdigit(str[i])) ++i;
      --i;
    } else {
      if (str[i] == '+' || str[i] == '-')
        a[++n] = 1;
      else
        a[++n] = 2;
    }
  }
  for (register int i = 1; i <= n; ++i) f[i][i] = g[i][i] = !a[i];
  for (register int l = n - 1; l >= 1; --l)
    if (a[l] != 2) {
      int *p1 = f[l] - 1;
      for (register int r = l + 1; r <= n; ++r)
        if (!a[r]) {
          long long t = 0;
          if (a[l] == 1) t = f[l + 1][r];
          int *p2 = g[r] + 1;
          for (register int k = l + 1; k <= r - 1; ++k)
            if (a[k]) t += 1ll * p1[k] * p2[k];
          f[l][r] = g[r][l] = t % ha;
        }
    }
  printf("%d\n", f[1][n]);
  return 0;
}
