from collections import Counter def solution_aux(S, groupSize, groups, numberOfAs): print(groups, S, numberOfAs) if len(groups) == 3: if len(S) == 0: print('count') return 1 if len(groups) > 3: return 0 if numberOfAs > groupSize: return 0 if len(S) == 0: return 0 result = 0 if S[0] == 'a': numberOfAs += 1 if numberOfAs < groupSize: groups[-1] += S[0] result += solution_aux(S[1:], groupSize, groups[:], numberOfAs) else: groups[-1] += S[0] result += solution_aux(S[1:], groupSize, groups[:], numberOfAs) if numberOfAs > groupSize: groups[-1] = groups[-1][:-1] groups.append(S[0]) result += solution_aux(S[1:], groupSize, groups[:], 1) else: if numberOfAs < groupSize: groups[-1] += S[0] result += solution_aux(S[1:], groupSize, groups[:], numberOfAs) groups[-1] = groups[-1][:-1] groups.append(S[0]) result += solution_aux(S[1:], groupSize, groups[:], numberOfAs) else: groups[-1] += S[0] result += solution_aux(S[1:], groupSize, groups[:], numberOfAs) groups[-1] = groups[-1][:-1] groups.append(S[0]) result += solution_aux(S[1:], groupSize, groups[:], 0) return result def solution(S): letters = Counter(S) if letters['a'] % 3 != 0: return 0 groupSize = letters['a'] // 3 return solution_aux(S[1:], groupSize, [S[0]], int(S[0] == 'a')) x = solution('bbbbb') print(x)