#include <cmath>
#include <iostream>
#include <map>
#include <vector>
#include <set>
#include <string>
#include <algorithm>
#include <stack>
#include <queue>
#include <cstring>
#include <cstdio>
#include <string>
#include <functional>
#define all(cont) cont.begin(), cont.end()
#define rall(cont) cont.end(), cont.begin()
#define tr(cont, it) for (typeof(cont.begin()) it = cont.begin() ; it != cont.end() ; it++)
#define FOR(i, j, k, l) for(int i=(j) ; i<(k) ; i+=(l))
#define rep(i, j) FOR(i, 0, j, 1)
#define rrep(i, j) FOR(i, j, -1, -1)
#define INF 1000000000
using namespace std;
typedef pair<int, int> ii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef vector<vi> vvi;
typedef long long ll;
int T;
ll N, L;
vector<ll> outlets, devices;
bool check(const vector<ll>& out2) {
for (int i=0 ; i<N ; i++) {
if (out2[i] != devices[i])
return false;
}
return true;
}
void pv(vector<ll> v) {
for (int i=0 ; i<N ; i++) {
printf("%lld ", v[i]);
}
printf("\n");
}
int main() {
scanf("%d", &T);
for (int t=1 ; t<=T ; t++) {
scanf("%lld %lld\n", &N, &L);
outlets.assign(N, 0L);
devices.assign(N, 0L);
for (ll i=0 ; i<N ; i++) {
for (ll j=0 ; j<L ; j++) {
char temp; scanf("%c", &temp);
if (temp == '1') outlets[i] |= (1L << (L - j - 1L));
}
scanf(" ");
}
scanf("\n");
for (ll i=0 ; i<N ; i++) {
for (ll j=0 ; j<L ; j++) {
char temp; scanf("%c", &temp);
if (temp == '1') devices[i] |= (1L << (L - j - 1L));
}
scanf(" ");
}
scanf("\n");
sort(all(devices));
int ans = 1e9;
for (ll i=0 ; i<N ; i++) {
ll flipped = devices[0] ^ outlets[i];
if (__builtin_popcount(flipped) < ans) {
vector<ll> outlets2 = outlets;
for (ll k=0 ; k<N ; k++) {
outlets2[k] ^= flipped;
}
sort(all(outlets2));
if (check(outlets2)) {
ans = __builtin_popcount(flipped);
}
}
}
printf("Case #%d: ", t);
if (ans == 1e9) {
printf("NOT POSSIBLE\n");
}
else {
printf("%d\n", ans);
}
}
}
I2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxzZXQ+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxzdGFjaz4KI2luY2x1ZGUgPHF1ZXVlPgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CgojZGVmaW5lIGFsbChjb250KSBjb250LmJlZ2luKCksIGNvbnQuZW5kKCkKI2RlZmluZSByYWxsKGNvbnQpIGNvbnQuZW5kKCksIGNvbnQuYmVnaW4oKQojZGVmaW5lIHRyKGNvbnQsIGl0KSBmb3IgKHR5cGVvZihjb250LmJlZ2luKCkpIGl0ID0gY29udC5iZWdpbigpIDsgaXQgIT0gY29udC5lbmQoKSA7IGl0KyspCiNkZWZpbmUgRk9SKGksIGosIGssIGwpIGZvcihpbnQgaT0oaikgOyBpPChrKSA7IGkrPShsKSkKI2RlZmluZSByZXAoaSwgaikgRk9SKGksIDAsIGosIDEpCiNkZWZpbmUgcnJlcChpLCBqKSBGT1IoaSwgaiwgLTEsIC0xKQoKI2RlZmluZSBJTkYgMTAwMDAwMDAwMAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgcGFpcjxpbnQsIGludD4gaWk7CnR5cGVkZWYgdmVjdG9yPGludD4gdmk7CnR5cGVkZWYgdmVjdG9yPGlpPiB2aWk7CnR5cGVkZWYgdmVjdG9yPHZpPiB2dmk7CnR5cGVkZWYgbG9uZyBsb25nIGxsOwoKaW50IFQ7CmxsIE4sIEw7CnZlY3RvcjxsbD4gb3V0bGV0cywgZGV2aWNlczsKCmJvb2wgY2hlY2soY29uc3QgdmVjdG9yPGxsPiYgb3V0MikgewogICAgZm9yIChpbnQgaT0wIDsgaTxOIDsgaSsrKSB7CiAgICAgICAgaWYgKG91dDJbaV0gIT0gZGV2aWNlc1tpXSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7Cn0KCnZvaWQgcHYodmVjdG9yPGxsPiB2KSB7CiAgICBmb3IgKGludCBpPTAgOyBpPE4gOyBpKyspIHsKICAgICAgICBwcmludGYoIiVsbGQgIiwgdltpXSk7CiAgICB9CiAgICBwcmludGYoIlxuIik7Cn0KCmludCBtYWluKCkgewogICAgc2NhbmYoIiVkIiwgJlQpOwogICAgZm9yIChpbnQgdD0xIDsgdDw9VCA7IHQrKykgewogICAgICAgIHNjYW5mKCIlbGxkICVsbGRcbiIsICZOLCAmTCk7CiAgICAgICAgb3V0bGV0cy5hc3NpZ24oTiwgMEwpOwogICAgICAgIGRldmljZXMuYXNzaWduKE4sIDBMKTsKCiAgICAgICAgZm9yIChsbCBpPTAgOyBpPE4gOyBpKyspIHsKICAgICAgICAgICAgZm9yIChsbCBqPTAgOyBqPEwgOyBqKyspIHsKICAgICAgICAgICAgICAgIGNoYXIgdGVtcDsgc2NhbmYoIiVjIiwgJnRlbXApOwogICAgICAgICAgICAgICAgaWYgKHRlbXAgPT0gJzEnKSBvdXRsZXRzW2ldIHw9ICgxTCA8PCAoTCAtIGogLSAxTCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHNjYW5mKCIgIik7CiAgICAgICAgfQogICAgICAgIHNjYW5mKCJcbiIpOwoKICAgICAgICBmb3IgKGxsIGk9MCA7IGk8TiA7IGkrKykgewogICAgICAgICAgICBmb3IgKGxsIGo9MCA7IGo8TCA7IGorKykgewogICAgICAgICAgICAgICAgY2hhciB0ZW1wOyBzY2FuZigiJWMiLCAmdGVtcCk7CiAgICAgICAgICAgICAgICBpZiAodGVtcCA9PSAnMScpIGRldmljZXNbaV0gfD0gKDFMIDw8IChMIC0gaiAtIDFMKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2NhbmYoIiAiKTsKICAgICAgICB9CiAgICAgICAgc2NhbmYoIlxuIik7CgogICAgICAgIHNvcnQoYWxsKGRldmljZXMpKTsKCiAgICAgICAgaW50IGFucyA9IDFlOTsKICAgICAgICBmb3IgKGxsIGk9MCA7IGk8TiA7IGkrKykgewogICAgICAgICAgICBsbCBmbGlwcGVkID0gZGV2aWNlc1swXSBeIG91dGxldHNbaV07CiAgICAgICAgICAgIGlmIChfX2J1aWx0aW5fcG9wY291bnQoZmxpcHBlZCkgPCBhbnMpIHsKICAgICAgICAgICAgICAgIHZlY3RvcjxsbD4gb3V0bGV0czIgPSBvdXRsZXRzOwogICAgICAgICAgICAgICAgZm9yIChsbCBrPTAgOyBrPE4gOyBrKyspIHsKICAgICAgICAgICAgICAgICAgICBvdXRsZXRzMltrXSBePSBmbGlwcGVkOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc29ydChhbGwob3V0bGV0czIpKTsKICAgICAgICAgICAgICAgIGlmIChjaGVjayhvdXRsZXRzMikpIHsKICAgICAgICAgICAgICAgICAgICBhbnMgPSBfX2J1aWx0aW5fcG9wY291bnQoZmxpcHBlZCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHByaW50ZigiQ2FzZSAjJWQ6ICIsIHQpOwogICAgICAgIGlmIChhbnMgPT0gMWU5KSB7CiAgICAgICAgICAgIHByaW50ZigiTk9UIFBPU1NJQkxFXG4iKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHByaW50ZigiJWRcbiIsIGFucyk7CiAgICAgICAgfQogICAgfQp9