#include #include #include #include using namespace std; struct ip { int array[4]; bool operator < (const ip & nip) const { int i; for(i=0; i<4; i++) { if(array[i] != nip.array[i]) { return array[i] < nip.array[i]; } } return false; } }; ip ip1s[1001]; ip ip2s[1001]; set pc; int main() { int t; int i, j, k, x; int n, m; cin >> t; for(i=1; i<=t; i++) { cin >> n >> m; string s; for(j=1; j<=n; j++) { cin >> s; int pos1 = 0; int pos2 = 0; for(k=0; k<3; k++) { pos2 = s.find(".",pos1); string ss = s.substr(pos1, pos2); sscanf(ss.c_str(), "%d", &(ip1s[j].array[k])); pos1 = pos2 + 1; } string ss = s.substr(pos1, s.size() - 1); sscanf(ss.c_str(), "%d", &(ip1s[j].array[k])); } for(j=1; j<=m; j++) { cin >> s; int pos1 = 0; int pos2 = 0; for(k=0; k<3; k++) { pos2 = s.find(".",pos1); string ss = s.substr(pos1, pos2); sscanf(ss.c_str(), "%d", &(ip2s[j].array[k])); pos1 = pos2 + 1; } string ss = s.substr(pos1, s.size() - 1); sscanf(ss.c_str(), "%d", &(ip2s[j].array[k])); } cout << "Case #" << i << ":\n"; for(j=1; j<=m; j++) { pc.clear(); for(k=1; k<=n; k++) { ip nip; for(x=0; x<4; x++) { nip.array[x] = (ip1s[k].array[x]) & (ip2s[j].array[x]); } pc.insert(nip); } cout << pc.size() << endl; } } return 0; }