| f | import sys | f | import sys |
| import asyncio | | import asyncio |
| | | |
| class YesFuture: | | class YesFuture: |
| | | |
| n | def __init__(self, value=None): | n | def __init__(self, val=None): |
| self.value = value | | self.val = val |
| | | |
| n | def set(self, value): | n | def set(self, val): |
| self.value = value | | self.val = val |
| | | |
| def __await__(self): | | def __await__(self): |
| | | |
| async def _(): | | async def _(): |
| n | return self.value | n | return self.val |
| return _().__await__() | | return _().__await__() |
| SUP = {'⁰': 0, '¹': 1, '²': 2, '³': 3, '⁴': 4, '⁵': 5, '⁶': 6, '⁷': 7, ' | | SUP = {'⁰': 0, '¹': 1, '²': 2, '³': 3, '⁴': 4, '⁵': 5, '⁶': 6, '⁷': 7, ' |
| ⁸': 8, '⁹': 9} | | ⁸': 8, '⁹': 9} |
| | | |
| def parse_poly(poly, x): | | def parse_poly(poly, x): |
| s = poly.replace(' ', '') | | s = poly.replace(' ', '') |
| terms = [] | | terms = [] |
| i = 0 | | i = 0 |
| sign = 1 | | sign = 1 |
| if s and s[0] in '+-': | | if s and s[0] in '+-': |
| sign = 1 if s[0] == '+' else -1 | | sign = 1 if s[0] == '+' else -1 |
| i = 1 | | i = 1 |
| n | st = i | n | start = i |
| while i < len(s): | | while i < len(s): |
| if s[i] in '+-': | | if s[i] in '+-': |
| n | terms.append((sign, s[st:i])) | n | terms.append((sign, s[start:i])) |
| sign = 1 if s[i] == '+' else -1 | | sign = 1 if s[i] == '+' else -1 |
| i += 1 | | i += 1 |
| n | st = i | n | start = i |
| else: | | else: |
| i += 1 | | i += 1 |
| n | terms.append((sign, s[st:])) | n | terms.append((sign, s[start:])) |
| parsed = [] | | coeff_power = [] |
| for sign, t in terms: | | for sign, term in terms: |
| if 'x' in t: | | if 'x' in term: |
| p = t.index('x') | | p = term.index('x') |
| c = t[:p] | | coeff_str = term[:p] |
| powp = t[p + 1:] | | pow_str = term[p + 1:] |
| c = int(c) if c else 1 | | coeff = int(coeff_str) if coeff_str else 1 |
| if powp: | | if pow_str: |
| pw = 0 | | power = 0 |
| for ch in powp: | | for ch in pow_str: |
| pw = pw * 10 + SUP[ch] | | power = power * 10 + SUP[ch] |
| else: | | else: |
| n | pw = 1 | n | power = 1 |
| parsed.append((sign * c, pw)) | | coeff_power.append((sign * coeff, power)) |
| else: | | else: |
| n | parsed.append((sign * int(t), 0)) | n | coeff_power.append((sign * int(term), 0)) |
| | | |
| def C(v): | | def C(v): |
| return YesFuture(v) | | return YesFuture(v) |
| exprs = [] | | exprs = [] |
| n | for c, pw in parsed: | n | for coeff, power in coeff_power: |
| if pw == 0: | | if power == 0: |
| term = C(c) | | term = C(coeff) |
| elif pw == 1: | | elif power == 1: |
| term = x if c == 1 else namespace['Mul'](C(c), x) | | term = x if coeff == 1 else ns['Mul'](C(coeff), x) |
| else: | | else: |
| n | pexpr = namespace['Pow'](x, C(pw)) | n | pow_expr = ns['Pow'](x, C(power)) |
| term = pexpr if c == 1 else namespace['Mul'](C(c), pexpr) | | term = pow_expr if coeff == 1 else ns['Mul'](C(coeff), pow_e |
| | | xpr) |
| exprs.append(term) | | exprs.append(term) |
| n | e = exprs[0] | n | expr = exprs[0] |
| for t in exprs[1:]: | | for term in exprs[1:]: |
| e = namespace['Sum'](e, t) | | expr = ns['Sum'](expr, term) |
| | | |
| async def evaluate(): | | async def evaluate(): |
| n | return await e | n | return await expr |
| return evaluate() | | return evaluate() |
| code = sys.stdin.read() | | code = sys.stdin.read() |
| t | namespace = {'YesFuture': YesFuture, 'parse_poly': parse_poly, 'asyncio' | t | ns = {'YesFuture': YesFuture, 'parse_poly': parse_poly, 'asyncio': async |
| : asyncio} | | io} |
| exec(code, namespace) | | exec(code, ns) |