def smallestNumber(pattern: str) -> str:
stack = []
result = []
# Iterate through the pattern and the last number
for i in range(len(pattern) + 1):
# Push the current number to the stack
stack.append(str(i + 1))
# If we reach the end or the current pattern is 'I', pop all from stack
if i == len(pattern) or pattern[i] == 'I':
while stack:
result.append(stack.pop())
return ''.join(result)
print(smallestNumber("IIIDIDDD"))
ZGVmIHNtYWxsZXN0TnVtYmVyKHBhdHRlcm46IHN0cikgLT4gc3RyOgogICAgc3RhY2sgPSBbXQogICAgcmVzdWx0ID0gW10KICAgIAogICAgIyBJdGVyYXRlIHRocm91Z2ggdGhlIHBhdHRlcm4gYW5kIHRoZSBsYXN0IG51bWJlcgogICAgZm9yIGkgaW4gcmFuZ2UobGVuKHBhdHRlcm4pICsgMSk6CiAgICAgICAgIyBQdXNoIHRoZSBjdXJyZW50IG51bWJlciB0byB0aGUgc3RhY2sKICAgICAgICBzdGFjay5hcHBlbmQoc3RyKGkgKyAxKSkKICAgICAgICAKICAgICAgICAjIElmIHdlIHJlYWNoIHRoZSBlbmQgb3IgdGhlIGN1cnJlbnQgcGF0dGVybiBpcyAnSScsIHBvcCBhbGwgZnJvbSBzdGFjawogICAgICAgIGlmIGkgPT0gbGVuKHBhdHRlcm4pIG9yIHBhdHRlcm5baV0gPT0gJ0knOgogICAgICAgICAgICB3aGlsZSBzdGFjazoKICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RhY2sucG9wKCkpCiAgICAKICAgIHJldHVybiAnJy5qb2luKHJlc3VsdCkKCnByaW50KHNtYWxsZXN0TnVtYmVyKCJJSUlESURERCIpKQ==