#include #include #include #include using namespace std; struct Data { int a , b , c , d; Data() {} Data(int a0 , int b0 , int c0 , int d0) : a(a0) , b(b0) , c(c0) , d(d0) {} bool operator < (const Data &ob) const { if(a != ob.a) return a < ob.a; if(b != ob.b) return b < ob.b; if(c != ob.c) return c < ob.c; return d < ob.d; } }; set s; vector v; int main() { int T; scanf("%d",&T); for(int kcase = 1; kcase <= T; kcase++) { int N , M; scanf("%d%d",&N,&M); v.clear(); for(int i = 0; i < N; i++) { int a , b , c , d; scanf("%d.%d.%d.%d",&a,&b,&c,&d); v.push_back(Data(a , b , c , d)); } printf("Case #%d:\n",kcase); while(M--) { s.clear(); int a , b , c , d; scanf("%d.%d.%d.%d",&a,&b,&c,&d); for(int i = 0; i < N; i++) { s.insert(Data(v[i].a&a , v[i].b&b , v[i].c&c , v[i].d&d)); } printf("%d\n",(int)s.size()); } } return 0; }