#include <bits/stdc++.h>
using namespace std;
string cal(string s) {
  string res = "";
  for (int i = 0; i < s.size(); i++)
    if (s[i] <= '9' && s[i] >= '0') {
      if (res.size() == 0 || res[res.size() - 1] != 'o') res += 'o';
    } else if (s[i] == '+' || s[i] == '-') {
      if (res.size() == 0 || res[res.size() - 1] != 'o')
        res += '~';
      else
        res += '+';
    } else
      res += '+';
  return (res);
}
template <unsigned int p>
class z {
 public:
  long long key;
  z(long long s = 0) { key = (s % p + p) % p; }
  z operator+(z s) const { return (z(key + s.key)); }
  z operator-(z s) const { return (z(key - s.key)); }
  z operator*(z s) const { return (z(key * s.key)); }
  z pow(long long s = 0) const {
    if (!s) return (z(1));
    z ans = pow(s / 2);
    ans = ans * ans;
    if (s % 2) ans = ans * (*this);
    return (ans);
  }
  z operator/(z s) const { return (operator*(s.pow(p - 2))); }
  void operator+=(z s) { *this = *this + s; }
  void operator-=(z s) { *this = *this - s; }
  void operator/=(z s) { *this = *this / s; }
  void operator*=(z s) { *this = *this * s; }
  inline friend ostream& operator<<(ostream& tout, z s) {
    return (tout << s.value());
  }
  int value() { return (key); }
  inline friend z operator+(long long s, z t) { return (t + s); }
  inline friend z operator-(long long s, z t) { return (z(0) - (t - s)); }
  inline friend z operator*(long long s, z t) { return (t * s); }
};
z<1000003> dyna[2010][2010];
int main() {
  string st;
  cin >> st;
  st = cal(st);
  for (int i = 0; i < st.size(); i++)
    if (st[i] == '+' && (i == 0 || st[i - 1] != 'o')) {
      cout << 0 << endl;
      return (0);
    }
  for (int i = 0; i + 1 < st.size(); i++)
    if (st[i] == '+' && (st[i + 1] != 'o' && st[i + 1] != '~')) {
      cout << 0 << endl;
      return (0);
    }
  if (st[st.size() - 1] != 'o') {
    cout << 0 << endl;
    return (0);
  }
  string nw = "";
  for (int i = 0; i < st.size(); i++)
    if (st[i] != 'o') nw += st[i];
  dyna[0][0] = 1;
  for (int i = 0; i < nw.size(); i++)
    if (nw[i] == '~')
      for (int j = 0; j <= 2005; j++) dyna[i + 1][j + 1] = dyna[i][j];
    else {
      for (int k = 2005; k >= 1; k--)
        dyna[i + 1][k] = dyna[i + 1][k + 1] + dyna[i][k - 1];
    }
  z<1000003> sum = 0;
  for (int i = 0; i <= 2005; i++) sum += dyna[nw.size()][i];
  cout << sum << endl;
}
