from math import comb
from itertools import product
def gen(s, k):
if k < 1:
return
if k == 1:
yield [s]
for i in range(s + 1):
for g in gen(s - i, k - 1):
yield [i] + g
distance = lambda x, y: sum(abs(u) - abs(v) for u, v in zip(x, y))
def get_point(word, radius):
n = len(word)
center = [ord(x) - 97 for x in word]
ans = 1
for r in range(1, radius + 1):
for dist in gen(r, n):
for d in product(*[(-x, x) if x > 0 else (x,) for x in dist]):
if all(0 <= u + v < 26 for u, v in zip(center, d)):
ans += 1
return ans
r = int(input())
w = input()
# res = get_point(w, r)
# print("res :", res)
def find_num_words(w, r):
n = len(w)
dp = [[0] * (r + 1) for _ in range(n + 1)]
dp[0][0] = 1
for i in range(n):
for d in range(r + 1):
if dp[i][d] > 0:
for o in range(97, 97 + 26):
_d = d + abs(ord(w[i]) - o)
if _d <= r:
print(i, d, chr(o))
dp[i + 1][_d] += dp[i][d]
print(dp)
return sum(dp[n][j] for j in range(r + 1))
# Example usage:
print(find_num_words(w, r)) # Output: 8
# [[1, 0, 0], [1, 1, 1], [1, 3, 4]]
To embed this program on your website, copy the following code and paste it into your website's HTML: