#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define REP(i, n) for(int i = 0; i < n; ++i) #define REP1(i, a, n) for(int i = a; i <= n; ++i) #define REPD(i, n) for(int i = n; i >= 0; --i) #define clm(m, a) memset(m, a, sizeof(m)) #define e 2.71828182845904523536 #define PI 3.14159265358979323846 #define exp 1e-9 #define fi first #define se second typedef long long ll; typedef unsigned long long llu; typedef pair pii; int n, m; struct Ip { int a, b, c, d; } IP[1010], ip[55]; int main() { #ifdef LOCAL freopen("in","r",stdin); #endif int cases, caseno = 0; scanf("%d", &cases); while(cases--) { scanf("%d%d", &n, &m); printf("Case #%d:\n", ++caseno); REP(i, n) { scanf("%d.%d.%d.%d", &IP[i].a, &IP[i].b, &IP[i].c, &IP[i].d); } REP(i, m) { set SET; Ip p; scanf("%d.%d.%d.%d", &p.a, &p.b, &p.c, &p.d); REP(j, n) { ll tag = (IP[j].a&p.a); tag = tag*1000 + (IP[j].b&p.b); tag = tag*1000 + (IP[j].c&p.c); tag = tag*1000 + (IP[j].d&p.d); SET.insert(tag); } printf("%d\n", (int)SET.size()); } } return 0; }