/** * Created by Zhenyi Luo on 15-5-23. */ import java.util.ArrayList; import java.util.HashSet; import java.util.Scanner; public class Main { private static void solve(Scanner sc) { int M = sc.nextInt(); int N = sc.nextInt(); String[] ips = new String[M]; String[] masks = new String[N]; for(int i = 0; i < M; i++){ ips[i] = sc.next(); } for(int i = 0; i < N; i++){ masks[i] = sc.next(); } for(int i = 0; i < N; i++){ System.out.println(getNum(masks[i], ips, M)); } } public static int getNum(String mask, String[] ips, int M){ ArrayList maskNum = parse(mask); HashSet ans = new HashSet(); for(int i = 0; i < M; i++){ ArrayList ipNum = parse(ips[i]); ArrayList netWorkNum = new ArrayList(); for(int j = 0; j < maskNum.size(); j++){ netWorkNum.add(maskNum.get(j) & ipNum.get(j)); } StringBuilder sb = new StringBuilder(); for(int j = 0; j < netWorkNum.size(); j++){ sb.append(netWorkNum.get(j) + "."); } ans.add(sb.toString()); } return ans.size(); } public static ArrayList parse(String s){ String[] tmp = s.split("\\."); ArrayList result = new ArrayList(); for(int i = 0; i < tmp.length; i++){ result.add(Integer.parseInt(tmp[i])); } return result; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int T = sc.nextInt(); for(int i = 0; i < T; i++){ System.out.println("Case #" + (i+1) + ":"); solve(sc); } sc.close(); } }