数据范围很小,极端情况下全是不同的字母,那么有种情况,直接dfs搜索所有可能即可。

import sys
from collections import Counter

# 输入加速
input = sys.stdin.readline

if __name__ == '__main__':
    s = input().strip()
    res = 0
    n = len(s)
    path = ['*'] * (n + 1)
    cnt = Counter(s)
    def dfs(i: int):
        if i == n + 1:
            global res
            res += 1
            return
        for k,v in cnt.items():
            if v > 0 and path[i - 1] != k:
                path[i] = k
                cnt[k] -= 1
                dfs(i + 1)
                cnt[k] += 1
    dfs(1)
    print(res)