···556677def decompressed_len(data, improved=False):
88+ if not re.findall(marker_re, data):
99+ return len(data)
1010+811 length = 0
9121010- while re.findall(marker_re, data):
1111- take, repeat = (int(x) for x in re.findall(marker_re, data)[0])
1313+ take, repeat = (int(x) for x in re.findall(marker_re, data)[0])
12141313- # Remove any text before the first marker
1414- length += data.index('(')
1515-1616- # Strip the marker
1717- end = data.index(')')
1818- data = data[end+1:]
1515+ # Find start and end indices of first marker
1616+ start = data.index('(')
1717+ end = data.index(')')
19182020- to_repeat = data[:take]
1919+ length += start
21202222- if '(' in to_repeat and improved:
2323- length += (decompressed_len(to_repeat, improved=True) * repeat)
2424- else:
2525- length += take * repeat
2121+ data = data[end+1:]
2222+ to_repeat = data[:take]
26232727- data = data[take:]
2424+ if '(' in to_repeat and improved:
2525+ length += decompressed_len(to_repeat, improved) * repeat
2626+ else:
2727+ length += take * repeat
28282929- return length + len(data)
2929+ return length + decompressed_len(data[take:], improved)
303031313232payload = fileinput.input()[0].strip()