// #include C { #include #include #include #include #include // } // #include C++ { #include #include #include #include #include #include #include #include #include #include #include #include #include // } using namespace std; // #typedef { typedef long long int64; typedef unsigned long long uint64; typedef pair PII; typedef pair PCC; typedef pair PLL; typedef pair PDD; // } // #parameter{ #ifdef DEBUG_MODE #define TYPE decltype #define RF(filename) {freopen((filename), "r", stdin);} #define WF(filename) {freopen((filename), "w", stdout);} #define DEBUG printf #else #define TYPE __typeof #define RF(filename) {;} #define WF(filename) {;} #define DEBUG(...) #endif // #define { #define SZ(a) ((int)(a).size()) #define X first #define Y second #define MP make_pair #define L(x) ((x)<<1) #define R(x) ((x)<<1 | 1) #define max3(x, y, z) (max(max((x), (y)), (z))) #define min3(x, y, z) (min(min((x), (y)), (z))) #define BIT(x, i) (((x) >> (i)) & 1) #define ALL(it) (it).begin(), (it).end() #define FILL(__space, __val) memset(__space, __val, sizeof(__space)) #define MOVE(__spaceTo, __spaceFrom) memmove(__spaceTo, __spaceFrom, sizeof(__spaceTo)) #define FOR(it, c) for( TYPE((c).begin()) it = (c).begin(); it != (c).end(); it++) ///////////////////////////////////////////////////////////// const double PI = acos(-1.0); const double EPS = 1e-6; #define MAX_N 1005 #define MAX_M 1005 #define MAXX 0x3f #define UPPER 2147483647LL #define INF ((1 << 30) - 1) #define BINF ((1LL << 62) - 1LL) #define NONE -1 #define NIL 0 // } ///////////////////////////////////////////////////////////// struct IP{ int A, B, C, D; IP(){} IP(int A, int B, int C, int D) :A(A), B(B), C(C), D(D){} void Input(){ scanf("%d.%d.%d.%d", &A, &B, &C, &D); } inline IP operator & (const IP &rhs) const{ return IP(A&rhs.A, B&rhs.B, C&rhs.C, D&rhs.D); } inline bool operator < (const IP &rhs) const{ if (A != rhs.A) return A < rhs.A; if (B != rhs.B) return B < rhs.B; if (C != rhs.C) return C < rhs.C; return D < rhs.D; } } ip[MAX_N]; ///////////////////////////////////////////////////////////// int main(){ RF("input.txt"); // WF("output.txt"); int T; scanf("%d", &T); for (int _ = 1; _ <= T; _++){ int N, M; scanf("%d %d", &N, &M); for (int i = 0; i < N; i++) ip[i].Input(); printf("Case #%d:\n", _); while (M--){ IP mask; mask.Input(); set S; for (int i = 0; i < N; i++) S.insert(ip[i] & mask); printf("%d\n", SZ(S)); } } return 0; }