你正在开发一种新的高性能数据库引擎——即时压缩与处理编解码器(ICPC)。ICPC 存储用户活动记录。每条用户活动记录都有一个整数用户标识符。记录存储在多个数据文件中。每个数据文件都是压缩的,并且可能包含来自多个用户的记录,然而 ICPC 必须处理查找特定用户子集的查询。为了做到这一点,必须有一种方法在尝试解压(这可能是一个漫长且耗费 CPU 的过程)之前,快速确定哪些数据文件可能包含特定用户的记录。
ICPC 使用一种称为布隆过滤器(Bloom Filter)的算法。其在 ICPC 中的实现方式描述如下。对于每个 ICPC 数据库,选择以下整数参数: $m$ 是过滤器中的位数; $f$ 是过滤器中哈希函数的数量; * $a_i$ 是 $0 \le i < f$ 时哈希函数的参数。
每个数据文件都会计算出一个布隆过滤器的值。该数据文件的布隆过滤器是一个 $m$ 位的向量。当且仅当该数据文件中存在某个用户标识符 $u_k$ 的记录,且对于某个哈希函数 $i$ ($0 \le i < f$) 满足以下等式时,第 $j$ 位 ($0 \le j < m$) 被置为 1: $$j = (u_k \cdot a_i) \pmod m \quad (1)$$
你的任务是实现 ICPC 的过滤逻辑。给定过滤器参数、多个数据文件的值以及一组用户标识符。你的任务是确定哪些数据文件可能包含至少一个来自指定集合中用户标识符的记录。当且仅当对于所有 $i$ ($0 \le i < f$),其过滤器值中由等式 (1) 给出的所有位 $j$ 都被置为 1 时,该数据文件才可能包含用户标识符为 $u_k$ 的记录。
输入格式
输入文件的第一行包含过滤器参数——整数 $m$、$f$ 以及 $0 \le i < f$ 时的 $a_i$ ($1 \le m \le 1000, 1 \le f \le 100, 1 \le a_i < 2^{31}$)。
输入文件的第二行包含一个整数 $n$——数据文件的数量 ($1 \le n \le 1000$)。接下来的 $n$ 行,每行包含相应文件的十六进制形式的布隆过滤器值。每个值由 $\lceil m/4 \rceil$ 个十六进制数字(0123456789abcdef 中的一个)组成的字符串表示。字符串的第一个数字表示该值的第 0–3 位(按从十六进制数字的最低有效位到最高有效位的顺序存储),第二个数字表示第 4–7 位,第三个数字表示第 8–11 位,依此类推。当 $m \pmod 4 \neq 0$ 时,最后一个十六进制数字在其最低有效位中表示该值的最后 $m \pmod 4$ 位。
输入文件的下一行包含一个整数 $q$——查询中用户标识符的数量 ($1 \le q \le 1000$),随后是 $q$ 个整数 $u_k$——查询中不同的用户标识符集合 ($1 \le u_k < 2^{31}$)。
输出格式
向输出文件写入一行,包含整数 $s$——可能包含至少一个来自指定集合中用户标识符记录的数据文件数量,随后是 $s$ 个数字 $d_t$ ($0 \le d_t < n$)——对应数据文件的从 0 开始的编号,按升序排列。
样例
输入 1
23 4 3 5 7 11 3 effde7 c07902 0800c1 3 2 4 6
输出 1
2 0 2