#include #include #include #include #include #include #include #include #include #include #define FS first #define SE second #define lson (o << 1), L, M #define rson ((o << 1) | 1), M + 1, R #define lc (o << 1) #define rc ((o << 1) | 1) using namespace std; typedef long long LL; const int MAXN = 1000 + 10; const int MAXM = 55; const int mod = 1000000007; struct Item { int a, b, c, d; Item(int a = 0, int b = 0, int c = 0, int d = 0) : a(a), b(b), c(c), d(d) {} bool operator < (const Item& t) const { if(a != t.a) return a < t.a; if(b != t.b) return b < t.b; if(c != t.c) return c < t.c; return d < t.d; } void in() { scanf("%d.%d.%d.%d", &a, &b, &c, &d); } Item get(Item& t) { return Item(a & t.a, b & t.b, c & t.c, d & t.d); } } ip[MAXN], mask[MAXM]; int main() { int T; scanf("%d", &T); int ca = 1; while(T--) { int n, m; scanf("%d%d", &n, &m); for(int i = 0 ; i < n ; i++) ip[i].in(); for(int i = 0 ; i < m ; i++) mask[i].in(); set vis; printf("Case #%d:\n", ca++); for(int i = 0 ; i < m ; i++) { vis.clear(); for(int j = 0 ; j < n ; j++) vis.insert(mask[i].get(ip[j])); printf("%d\n", vis.size()); } } return 0; } /* */