医生
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

小红是一名医生。

现在小红对于每个病人的症状用一个长度为m的01串表示,第i个字符代表第i个身体部位的症状,0代表健康,1代表不健康。
一共有k种药,每种药也用一个长度为m的01串表示,第i个字符为'1'代表该药可以治愈第i个部位的症状。
对于每个病人,请你帮小红求出治愈该病人需要开的最少的药数量。

输入描述:

第一行输入两个正整数n,m,代表病人数量和症状种类数。
接下来的n行,每行输入一个长度为m的01串,代表每个病人的症状情况。
接下来一行输入一个正整数k,代表药物的数量。
接下来的k行,每行输入一个长度为m的01串,代表每个药物可以治愈的症状情况。
1\leq m \leq 20
1\leq n \leq 10^4
1\leq k \leq 10

输出描述:

输出n行,每行输出治愈该病人所需的最小药物数量。特殊的,如果该病人无法被治愈,请输出-1。
示例1

输入

复制
3 4
1000
0101
1011
2
1001
0011

输出

复制
1
-1
2

说明

第一个病人开第一种药即可。
第二个病人显然是无法治愈的。
第三个病人需要同时开第一种和第二种药。