题目背景
Ziven 从宠物店里买了一只可爱的小狗回来。
题目描述
Ziven 想给这只小狗取一个名字,于是从网上搜了一串长度为 $N$ 的字符串,只包含小写字母、大写字母、`-` 和 `_` 的字符串 $S$ 。 对于每一个 $S$ 的子序列 $T$,只要满足以下要求,便会成为一个“合格的名字”。 1. 字符串 $T$ 以小写字母、大写字母、`-` 和 `_` 分割成若干段,对于每个包含字母的段 $T'$,对于 $2le i le |T'|$,应有 $T'_ {i-1} le T'_i$。 2. `-`前不能为小写字母,`_`前不能为大写字母。 求有多少个“合格的名字”? 注意: 1. 只要选择的位置不同,即使子序列内容相同,依然算作两种方法。 2. 由于答案可能过大,请将答案模 `998244353` 后再输出。
输入格式
第一行一个整数 $N$,表示字符串 $S$ 的长度。 第二行长度为 $N$ 的字符串 $S$ ,保证只由小写字母、大写字母、`-` 和 `_` 组成。
输出格式
一行,输出“合格的名字”的总数模 `998244353`。
说明/提示
## 样例说明 样例组1:已其中一个子序列 `ba-ABc` 举例,应分割成:`ba`,`-`,`AB`,`c`。其中包含字母的为:`ba`,`AB`,`c`。但由于 `ba` 不满足要求 1,所以该子序列不为一个“合格的名字”。而子序列 `ABc` 是一个“合格的名字”。 ## 数据范围 - 对于 $20%$ 的数据,$1le N le 20$。 - 对于 $100%$ 的数据,$1le N le2×10^5$。