#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T bigmod(T b, T p, T m) {
  T ret;
  if (p == 0) return 1;
  if (p & 1) {
    ret = (bigmod(b, p / 2, m) % m);
    return ((b % m) * ret * ret) % m;
  } else {
    ret = (bigmod(b, p / 2, m) % m);
    return (ret * ret) % m;
  }
}
template <class T>
inline T _sqrt(T a) {
  return (T)sqrt((double)a);
}
template <class T, class X>
inline T _pow(T a, X b) {
  T res = 1;
  for (int i = 1; i <= b; i++) res *= a;
  return res;
}
int dx4[] = {1, -1, 0, 0};
int dy4[] = {0, 0, 1, -1};
int dx6[] = {0, 0, 1, -1, 0, 0};
int dy6[] = {1, -1, 0, 0, 0, 0};
int dz6[] = {0, 0, 0, 0, 1, -1};
int dx8[] = {1, -1, 0, 0, -1, 1, -1, 1};
int dy8[] = {0, 0, 1, -1, 1, 1, -1, -1};
int dkx8[] = {-1, 1, -1, 1, -2, -2, 2, 2};
int dky8[] = {2, 2, -2, -2, 1, -1, 1, -1};
int tc = 1;
const long long int mx = 100000;
long long pow2(long long n) {
  long long i, ans = 1;
  for (i = 1; i <= n; i++) ans = (ans * 2) % 1000003;
  return ans;
}
long long bintodec(string str) {
  long long i, ans = 0, p, x;
  for (i = str.size() - 1, p = 0; i >= 0; i--, p++)
    if (str[i] == '1') ans = (ans + pow2(p)) % 1000003;
  return ans;
}
int main() {
  long long i, ans;
  map<char, string> mp;
  string str, ss;
  mp['>'] = "1000";
  mp['<'] = "1001";
  mp['+'] = "1010";
  mp['-'] = "1011";
  mp['.'] = "1100";
  mp[','] = "1101";
  mp['['] = "1110";
  mp[']'] = "1111";
  while (cin >> str) {
    ss = "";
    for (i = 0; i < str.size(); i++) ss += mp[str[i]];
    ans = bintodec(ss);
    cout << ans << "\n";
  }
  return 0;
}
