from __future__ import unicode_literals, division, print_function
import re

def do_it(expr):
    elems = parse_input(expr)
    if elems is None: raise Exception()
    val1, op_chr, val2, val3 = elems
    
    op_fn, test_fn = get_operator_fn(op_chr)
    precheck_fn = get_precheck_fn(val1, test_fn, val2, val3)
    valid_fn = get_valid_fn(val1, op_fn, val2, val3)

    def assignNum(chars, nums=range(10), a_dic={}):
        if len(chars) <= 0:
            if valid_fn(a_dic):
                print(format_result(val1, op_chr, val2, val3, a_dic))
                return True
            return False

        for i in range(len(nums)):
            a_dic[chars[0]] = nums[i]
            
            if not precheck_fn(a_dic):
                continue
            
            if assignNum(chars[1:], nums[0:i] + nums[i + 1:]):
                return True
            
        del a_dic[chars[0]]
        return False

    print(expr)
    assignNum(list(set([ch for ch in val1 + val2 + val3])))

def to_num(val, a_dic):
    l_val = [ch for ch in val]
    l_pow = [pow(10, i) for i in reversed(range(len(l_val)))]
    return sum([a_dic[ch] * i for ch, i in zip(l_val, l_pow)])

def get_precheck_fn(val1, test_fn, val2, val3):
    def precheck_fn(a_dic):
        try:
            if any([a_dic[val[0]] == 0 for val in [val1, val2, val3]]):
                return False
        except KeyError:
            pass
        
        for i in range(min(len(val1), len(val2), len(val3))):
            try:
                if not test_fn(a_dic[val1[-i - 1]], a_dic[val2[-i - 1]], a_dic[val3[-i - 1]]):
                    return False
            except KeyError:
                pass
                
        return True

    return precheck_fn

def get_valid_fn(val1, op_fn, val2, val3):
    def valid_fn(a_dic):
        return op_fn(to_num(val1, a_dic), to_num(val2, a_dic)) == to_num(val3, a_dic)
    return valid_fn

def get_operator_fn(op_chr):
    if op_chr == '+': return lambda x, y: x + y, lambda x, y, z: z in ((x + y) % 10, (x + y + 1) % 10)
    if op_chr == '-': return lambda x, y: x - y, lambda x, y, z: z in ((10 + x - y) % 10, (9 + x - y) % 10)

def parse_input(expr):
    m = re.match(r'^([A-Z]+)\s*([\+\-\*/])\s*([A-Z]+)\s*=\s*([A-Z]+)', expr)
    if m is not None:
        return m.group(1), m.group(2), m.group(3), m.group(4)
    return None

def format_result(val1, op, val2, val3, a_dic):
    vals = [''.join([str(a_dic[ch]) for ch in val]) for val in [val1, val2, val3]]
    return '{} {} {} = {}'.format(vals[0], op, vals[1], vals[2]) 

do_it('SEND + MORE = MONEY')
print()
do_it('WWWDOT - GOOGLE = DOTCOM')
