#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
long long dp[35][4][4];
void precompute() {
for (int u = 0; u < 4; ++u) {
for (int v = 0; v < 4; ++v) {
dp[0][u][v] = (u == 2) + (v == 2);
}
}
for (int i = 0; i < 30; ++i) {
for (int u = 0; u < 4; ++u) {
for (int v = 0; v < 4; ++v) {
int mid = u ^ v;
dp[i+1][u][v] = dp[i][u][mid] + dp[i][mid][v] - (mid == 2);
}
}
}
}
void print128(__int128 n) {
if (n == 0) {
cout << 0 << "\n";
return;
}
string s;
while (n > 0) {
s += (char)('0' + (n % 10));
n /= 10;
}
reverse(s.begin(), s.end());
cout << s << "\n";
}
void solve() {
int n, k;
cin >> n >> k;
string s, z;
cin >> s >> z;
long long cnt[4] = {0};
for (int i = 0; i < n; ++i) {
int tp = ((s[i] - '0') << 1) | (z[i] - '0');
cnt[tp]++;
}
__int128 total_sum = 0;
for (int tp = 0; tp < 4; ++tp) {
for (int tq = 0; tq < 4; ++tq) {
long long pairs = cnt[tp] * cnt[tq];
if (pairs == 0) continue;
int sL = ((tp >> 1) << 1) | (tq >> 1);
int sR = ((tp & 1) << 1) | (tq & 1);
total_sum += (__int128)pairs * dp[k][sL][sR];
}
}
print128(total_sum);
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
precompute();
int t;
if (cin >> t) {
while (t--) {
solve();
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmxvbmcgbG9uZyBkcFszNV1bNF1bNF07Cgp2b2lkIHByZWNvbXB1dGUoKSB7CiAgICBmb3IgKGludCB1ID0gMDsgdSA8IDQ7ICsrdSkgewogICAgICAgIGZvciAoaW50IHYgPSAwOyB2IDwgNDsgKyt2KSB7CiAgICAgICAgICAgIGRwWzBdW3VdW3ZdID0gKHUgPT0gMikgKyAodiA9PSAyKTsKICAgICAgICB9CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IDMwOyArK2kpIHsKICAgICAgICBmb3IgKGludCB1ID0gMDsgdSA8IDQ7ICsrdSkgewogICAgICAgICAgICBmb3IgKGludCB2ID0gMDsgdiA8IDQ7ICsrdikgewogICAgICAgICAgICAgICAgaW50IG1pZCA9IHUgXiB2OwogICAgICAgICAgICAgICAgZHBbaSsxXVt1XVt2XSA9IGRwW2ldW3VdW21pZF0gKyBkcFtpXVttaWRdW3ZdIC0gKG1pZCA9PSAyKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKdm9pZCBwcmludDEyOChfX2ludDEyOCBuKSB7CiAgICBpZiAobiA9PSAwKSB7CiAgICAgICAgY291dCA8PCAwIDw8ICJcbiI7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgc3RyaW5nIHM7CiAgICB3aGlsZSAobiA+IDApIHsKICAgICAgICBzICs9IChjaGFyKSgnMCcgKyAobiAlIDEwKSk7CiAgICAgICAgbiAvPSAxMDsKICAgIH0KICAgIHJldmVyc2Uocy5iZWdpbigpLCBzLmVuZCgpKTsKICAgIGNvdXQgPDwgcyA8PCAiXG4iOwp9Cgp2b2lkIHNvbHZlKCkgewogICAgaW50IG4sIGs7CiAgICBjaW4gPj4gbiA+PiBrOwogICAgc3RyaW5nIHMsIHo7CiAgICBjaW4gPj4gcyA+PiB6OwogICAgCiAgICBsb25nIGxvbmcgY250WzRdID0gezB9OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICBpbnQgdHAgPSAoKHNbaV0gLSAnMCcpIDw8IDEpIHwgKHpbaV0gLSAnMCcpOwogICAgICAgIGNudFt0cF0rKzsKICAgIH0KICAgIAogICAgX19pbnQxMjggdG90YWxfc3VtID0gMDsKICAgIGZvciAoaW50IHRwID0gMDsgdHAgPCA0OyArK3RwKSB7CiAgICAgICAgZm9yIChpbnQgdHEgPSAwOyB0cSA8IDQ7ICsrdHEpIHsKICAgICAgICAgICAgbG9uZyBsb25nIHBhaXJzID0gY250W3RwXSAqIGNudFt0cV07CiAgICAgICAgICAgIGlmIChwYWlycyA9PSAwKSBjb250aW51ZTsKICAgICAgICAgICAgaW50IHNMID0gKCh0cCA+PiAxKSA8PCAxKSB8ICh0cSA+PiAxKTsKICAgICAgICAgICAgaW50IHNSID0gKCh0cCAmIDEpIDw8IDEpIHwgKHRxICYgMSk7CiAgICAgICAgICAgIHRvdGFsX3N1bSArPSAoX19pbnQxMjgpcGFpcnMgKiBkcFtrXVtzTF1bc1JdOwogICAgICAgIH0KICAgIH0KICAgIHByaW50MTI4KHRvdGFsX3N1bSk7Cn0KCmludCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwogICAgcHJlY29tcHV0ZSgpOwogICAgaW50IHQ7CiAgICBpZiAoY2luID4+IHQpIHsKICAgICAgICB3aGlsZSAodC0tKSB7CiAgICAgICAgICAgIHNvbHZlKCk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDA7Cn0=