| f | import sys | f | import sys |
| import asyncio | | import asyncio |
| | | |
| class YesFuture: | | class YesFuture: |
| | | |
| n | def __init__(self, val=None): | n | def __init__(self, value=None): |
| self.val = val | | self.value = value |
| | | |
| n | def set(self, val): | n | def set(self, value): |
| self.val = val | | self.value = value |
| | | |
| def __await__(self): | | def __await__(self): |
| | | |
| async def _(): | | async def _(): |
| n | return self.val | n | return self.value |
| 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 | start = i | n | st = i |
| while i < len(s): | | while i < len(s): |
| if s[i] in '+-': | | if s[i] in '+-': |
| n | terms.append((sign, s[start:i])) | n | terms.append((sign, s[st:i])) |
| sign = 1 if s[i] == '+' else -1 | | sign = 1 if s[i] == '+' else -1 |
| i += 1 | | i += 1 |
| n | start = i | n | st = i |
| else: | | else: |
| i += 1 | | i += 1 |
| n | terms.append((sign, s[start:])) | n | terms.append((sign, s[st:])) |
| coeff_power = [] | | parsed = [] |
| for sign, term in terms: | | for sign, t in terms: |
| if 'x' in term: | | if 'x' in t: |
| p = term.index('x') | | p = t.index('x') |
| coeff_str = term[:p] | | c = t[:p] |
| pow_str = term[p + 1:] | | powp = t[p + 1:] |
| coeff = int(coeff_str) if coeff_str else 1 | | c = int(c) if c else 1 |
| if pow_str: | | if powp: |
| power = 0 | | pw = 0 |
| for ch in pow_str: | | for ch in powp: |
| power = power * 10 + SUP[ch] | | pw = pw * 10 + SUP[ch] |
| else: | | else: |
| n | power = 1 | n | pw = 1 |
| coeff_power.append((sign * coeff, power)) | | parsed.append((sign * c, pw)) |
| else: | | else: |
| n | coeff_power.append((sign * int(term), 0)) | n | parsed.append((sign * int(t), 0)) |
| | | |
| def C(v): | | def C(v): |
| return YesFuture(v) | | return YesFuture(v) |
| exprs = [] | | exprs = [] |
| n | for coeff, power in coeff_power: | n | for c, pw in parsed: |
| if power == 0: | | if pw == 0: |
| term = C(coeff) | | term = C(c) |
| elif power == 1: | | elif pw == 1: |
| term = x if coeff == 1 else ns['Mul'](C(coeff), x) | | term = x if c == 1 else namespace['Mul'](C(c), x) |
| else: | | else: |
| n | pow_expr = ns['Pow'](x, C(power)) | n | pexpr = namespace['Pow'](x, C(pw)) |
| term = pow_expr if coeff == 1 else ns['Mul'](C(coeff), pow_e | | term = pexpr if c == 1 else namespace['Mul'](C(c), pexpr) |
| xpr) | | |
| exprs.append(term) | | exprs.append(term) |
| n | expr = exprs[0] | n | e = exprs[0] |
| for term in exprs[1:]: | | for t in exprs[1:]: |
| expr = ns['Sum'](expr, term) | | e = namespace['Sum'](e, t) |
| | | |
| async def evaluate(): | | async def evaluate(): |
| n | return await expr | n | return await e |
| return evaluate() | | return evaluate() |
| code = sys.stdin.read() | | code = sys.stdin.read() |
| t | ns = {'YesFuture': YesFuture, 'parse_poly': parse_poly, 'asyncio': async | t | namespace = {'YesFuture': YesFuture, 'parse_poly': parse_poly, 'asyncio' |
| io} | | : asyncio} |
| exec(code, ns) | | exec(code, namespace) |