๐Ÿšง This website is under construction. ๐Ÿšง
AtCoder
ABC
215
E

ABC
E
bitDP

ABC215 E - Chain Contestant

https://atcoder.jp/contests/abc215/tasks/abc215_e (opens in a new tab)
ๆฐด่‰ฒไธŠไฝใ€‚bitDPใ€‚

DP ใƒ†ใƒผใƒ–ใƒซใฏdp[i][j][k] := s[:i]ใพใงใงใ€ๅˆฉ็”จใ—ใŸๆ–‡ๅญ—้›†ๅˆใŒjใ€ๆœ€ๅพŒใฎๆ–‡ๅญ—ใŒkใฎๅ ดๅˆใฎๆ•ฐ

้ท็งปๆ–นๆณ•ใจๅˆๆœŸๅŒ–ใซใƒใ‚คใƒณใƒˆใŒใ‚ใ‚‹ใ€‚

ใพใšๅˆๆœŸๅŒ–ใซ้–ขใ—ใฆใ€ใ„ใคใ‚‚ใฎใ‚ˆใ†ใซdp[0][0][0]=1ใจใ™ใ‚‹ใจๆ„ๅ‘ณใŒๅค‰ใ‚ใฃใฆใใ‚‹ใฎใงใ€ใ“ใ“ใงใฏ 11 ็•ช็›ฎใฎใ‚ขใƒซใƒ•ใ‚กใƒ™ใƒƒใƒˆใ‚’็”จๆ„ใ—ใ€ใใฎ็Šถๆ…‹ใซๅฏพใ— 1 ใ‚’ไธŽใˆใ‚‹ใ€‚ใคใพใ‚Šใ€DP ใƒ†ใƒผใƒ–ใƒซใฎkใฎๆทปๅญ—ๅˆ†ใ‚’ไธ€ใคๅข—ใ‚„ใ—ใ€้ท็งปๆ™‚ใ‚‚ใใ“ใ‹ใ‚‰ใฎ้ท็งปใŒใ‚ใ‚‹ใ‚ˆใ†ใซ๏ผˆใคใพใ‚Šๆœ€ใ‚‚ๅ†…ๅดใฎใƒซใƒผใƒ—ใ‚’ใ‚‚ใ† 1 ๅ›žๅˆ†ๅข—ใ‚„ใ™๏ผ‰ๅ‡ฆ็†ใ™ใ‚Œใฐใ‚ˆใ„ใ€

ใพใŸ้ท็งปใ‚’ๆทปๅญ—ใซ้›†ๅˆใ‚’ๅ–ใ‚‹ใฎใงๅฐ‘ใ—ๆ…ฃใ‚Œใชใ„ใŒใ€ๅ„็Šถๆ…‹ใง่€ƒใˆใ‚‹ใฎใฏใ€Œใ‚ณใƒณใƒ†ใ‚นใƒˆใซๅ‚ๅŠ ใ™ใ‚‹ใ‹ๅฆใ‹ใ€ใงใ‚ใ‚Šใ€ใพใšๅ‰่€…ใฏใ€Œใ“ใ‚Œใพใงใซๅ‚ๅŠ ใ—ใฆใ„ใชใ„ or ็›ดๅ‰ใซๅ‚ๅŠ ใ—ใฆใ„ใ‚‹ใ€ใฎใ„ใšใ‚Œใ‹ใ‹ใ‚‰้ท็งปใŒใ‚ใ‚Šใ€ๅพŒ่€…ใซ้–ขใ—ใฆใฏ็Šถๆ…‹ใซใ‹ใ‹ใ‚ใ‚‰ใš้ท็งปใŒใ‚ใ‚‹ใ€‚

ใ‚ˆใฃใฆใ“ใ‚Œใ‚‰ใ‚’้ฉๅˆ‡ใซๅฎŸ่ฃ…ใ™ใ‚Œใฐใ‚ˆใ„ใ€‚

MOD = 998244353
MAX_S = 10
 
n = int(input())
s = list(map(lambda x: ord(x) - ord('A'), input()))
 
# dp[i][j][k] := s[:i]ใพใงใงใ€ๅˆฉ็”จใ—ใŸๆ–‡ๅญ—้›†ๅˆใŒjใ€ๆœ€ๅพŒใฎๆ–‡ๅญ—ใŒkใฎๅ ดๅˆใฎๆ•ฐ
dp = [[[0] * (MAX_S + 1) for _ in range(1 << MAX_S)] for _ in range(n + 1)]
dp[0][0][10] = 1
 
for i in range(n):
    for j in range(1 << MAX_S):
        for k in range(MAX_S + 1):
            if True:  # s[i]ใ‚’้ธๆŠžใ—ใชใ„
                dp[i + 1][j][k] += dp[i][j][k]
                dp[i + 1][j][k] %= MOD
            if not 1 << s[i] & j:  # s[i]ใ‚’ๅˆ้ธๆŠž
                dp[i + 1][j | 1 << s[i]][s[i]] += dp[i][j][k]
                dp[i + 1][j | 1 << s[i]][s[i]] %= MOD
            if 1 << s[i] & j and s[i] == k:  # s[i]ใ‚’้€ฃ็ถšใง้ธๆŠž
                dp[i + 1][j][s[i]] += dp[i][j][k]
                dp[i + 1][j][s[i]] %= MOD
 
# print(*dp, sep='\n')
 
ans = 0
for j in range(1 << MAX_S):
    for k in range(MAX_S):
        ans += dp[n][j][k]
        ans %= MOD
 
print(ans)