← Home
package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

const MOD int64 = 1000003

func isDigit(c byte) bool {
	return c >= '0' && c <= '9'
}

func main() {
	in := bufio.NewReaderSize(os.Stdin, 1<<20)
	s, _ := in.ReadString('\n')
	s = strings.TrimSpace(s)
	n := len(s)
	if n == 0 {
		fmt.Print(0)
		return
	}

	pre := make([]int, 0)
	i := 0
	cnt := 0
	for i < n && (s[i] == '+' || s[i] == '-') {
		cnt++
		i++
	}
	if i == n || !isDigit(s[i]) {
		fmt.Print(0)
		return
	}
	pre = append(pre, cnt)
	for i < n && isDigit(s[i]) {
		i++
	}

	for i < n {
		c := s[i]
		if c != '+' && c != '-' && c != '*' && c != '/' {
			fmt.Print(0)
			return
		}
		i++
		cnt = 0
		for i < n && !isDigit(s[i]) {
			if s[i] != '+' && s[i] != '-' {
				fmt.Print(0)
				return
			}
			cnt++
			i++
		}
		if i == n {
			fmt.Print(0)
			return
		}
		pre = append(pre, cnt)
		for i < n && isDigit(s[i]) {
			i++
		}
	}

	k := len(pre)
	f := make([][]int, k)
	for i := 0; i < k; i++ {
		f[i] = make([]int, k)
		f[i][i] = 1
	}

	for l := k - 1; l >= 0; l-- {
		length := k - l
		next := make([]int, length)
		next[0] = 1

		for off := 1; off < length; off++ {
			r := l + off
			var sum int64
			for j := 0; j < off; j++ {
				sum += int64(next[j]) * int64(f[l+j+1][r])
			}
			next[off] = int(sum % MOD)
		}

		for t := 0; t < pre[l]; t++ {
			cur := make([]int, length)
			cur[0] = 1
			for off := 1; off < length; off++ {
				r := l + off
				sum := int64(next[off])
				for j := 0; j < off; j++ {
					sum += int64(cur[j]) * int64(f[l+j+1][r])
				}
				cur[off] = int(sum % MOD)
			}
			next = cur
		}

		copy(f[l][l:], next)
	}

	fmt.Print(f[0][k-1] % int(MOD))
}