def parse(s):
nums = []
words = []
expecting_num = True if ord('9') >= ord(s[0]) >= ord('0') else False
if not expecting_num:
nums = [1]
num_buf = []
word_buf = []
for i, x in enumerate(s):
if ord('9') >= ord(x) >= ord('0'): # if x.isdigit():
if not expecting_num:
# word ends, start num
words.append(''.join(word_buf))
word_buf = []
expecting_num = True
num_buf.append(x)
else:
if expecting_num:
# num ends, start word
nums.append(int(''.join(num_buf)))
num_buf = []
expecting_num = False
word_buf.append(x)
if num_buf:
nums.append(int(''.join(num_buf)))
if word_buf:
words.append(''.join(word_buf))
return nums, words
while (s := input("Enter string (e.g., 3a2bc1xyz): ")):
print(list(zip(*parse(s))))
# 3. Use zip() to pair the nums with the *following* string
# and use a generator expression (like a list comprehension)
# Example: [('3', 'bc'), ('2', 'xyz'), ('1', '')]
ans = "".join(s_part * n_part for n_part, s_part in
zip(*parse(s)))
print(f"Final Answer: {ans}")