#zyk2A. 字典树(trie)

字典树(trie)

附加文件

题目描述

在很久很久以前的洛谷题库中,有这样一道题:给定 nn 个 01 串,问将这 nn 个 01 串插入到一个仅有根节点的 trie 后,这个 trie 的节点数是多少。

在本题中,将一个 01 串插入到一个 trie 定义为:

  • 初始时,当前节点为根
  • 从前往后遍历这个 01 串的所有字符
  • 如果当前节点没有与此 01 字符对应的儿子,那么新建一个节点作为对应的儿子
  • 然后将当前节点修改为对应的儿子

例如:将 000010 插入到一个仅有根节点的 trie 后,这个 trie 的节点数为 6。

由于年代久远,这题的测试数据遭到了损坏:其中一些字符无法确定是 0 还是 1。 我们将这些损坏的字符记为 ?

为了完全覆盖测试数据的所有情况,你需要求出所有可能的 2k2^kkk? 的个数)种情况下的最终 trie 的节点数之和。

由于答案可能很大,你只需要输出答案对 998244353 取模的结果即可。

输入格式

第一行一个整数 nn

接下来 nn 行,每行一个仅包含 0、1、? 三种字符的字符串 sis_i

输出格式

一行一个整数,表示答案

样例

样例输入 1

5
00110
01101
10011
11101
11111

样例输出 1

21

样例输入 2

3
?
0?
?1?

样例输出 2

88

数据范围与提示

本题共 1010 个测试点,每个测试点分值为 1010

测试点具体限制如下:

  • 对于测试点 1,sis_i 中没有 ?
  • 对于测试点 2, 3,sis_i 中没有 01
  • 对于测试点 4,n8n \le 8
  • 对于测试点 5,n12n \le 12
  • 对于测试点 6,n16n \le 16
  • 对于测试点 7,8,9,10,没有特殊限制。
  • 对于所有数据:1n20,1si1001 \le n \le 20, 1 \le |si| \le 100