#include <bits/stdc++.h>
using namespace std;
int dx[] = {1, -1, 0, 0};
int dy[] = {0, 0, 1, -1};
std::vector<std::string> &split(const std::string &s, char delim,
                                std::vector<std::string> &elems) {
  std::stringstream ss(s);
  std::string item;
  while (std::getline(ss, item, delim)) elems.push_back(item);
  return elems;
}
std::vector<std::string> split(const std::string &s, char delim) {
  std::vector<std::string> elems;
  return split(s, delim, elems);
}
string tostring(int n) {
  stringstream ss;
  ss << n;
  return ss.str();
}
int MOD = 1000003;
int gogo(int K) {
  if (K == 0) return 1;
  if (K == 1) return 2;
  if (K % 2 == 0) {
    long long p = gogo(K / 2);
    return ((long long)p * (long long)p) % MOD;
  } else {
    long long p = gogo(K - 1);
    p *= 2;
    return p % MOD;
  }
}
int main() {
  map<char, int> M;
  M['>'] = 1000;
  M['<'] = 1001;
  M['+'] = 1010;
  M['-'] = 1011;
  M['.'] = 1100;
  M[','] = 1101;
  M['['] = 1110;
  M[']'] = 1111;
  string str;
  cin >> str;
  int l = str.length();
  int p = 0;
  string res = "";
  for (int i = 0; i < l; i++) res = res + tostring(M[str[i]]);
  long long ret = 0, t;
  l = res.length();
  for (int i = l - 1, k = 0; i >= 0; i--, k++) {
    p = res[i] - '0';
    t = gogo(k);
    ret = ret + (long long)t * (long long)p;
    if (ret >= MOD) ret %= MOD;
  }
  cout << ret << endl;
  return 0;
}
