def solve(nums: str) -> int:
# your code here
if nums == "0" or nums[0] == "0":
return 0
if nums == "10" or nums == "20" or len(nums) == 1:
return 1
for i in range(1, len(nums)):
if nums[i] == "0" and (nums[i-1] != "1" and nums[i-1] != "2"):
print(nums[i], nums[i-1])
return 0
s = [1 for i in range(len(nums)+1)]
for i in range(2, len(nums)+1):
if (nums[i-2] == "1" and nums[i-1] != "0") or (nums[i-2] == "2" and (0 < int(nums[i - 1]) < 7)):
s[i] = s[i-1] + s[i-2]
else:
s[i] = s[i-1]
return s[len(nums)]
assert solve( "12") == 2
assert solve("31717126241541717") == 192
def solve(nums: str) -> int:
def possi(n):
count = n - 1
i = n - 3
while i > 0:
count = count + (i+1)*i//2
i -= 2
return count + 1
result = 1
left = 0
right = 1
while right < len(nums) and nums[left] != '0':
if int(nums[right-1:right+1])>26:
if nums[right] == '0':
return 0
if right - left >= 2:
result *= possi(right - left)
left = right
right += 1
elif int(nums[right-1:right+1]) == 10 or int(nums[right-1:right+1]) == 20:
if right - left >= 2:
result *= possi(right - left + 1)
left = right+1
right += 2
else:
right += 1
else:
if left < len(nums) and nums[left] == '0':
return 0
if left < len(nums)-1:
result *= possi(right - left)
return result