#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
int main() {
// Optimize standard I/O operations for speed
ios_base::sync_with_stdio(false);
cin.tie(NULL);
ll t;
cin >> t;
while (t--) {
ll m, n;
cin >> m >> n;
vector<int> b(n + 1);
ll total_1 = 0, total_2 = 0;
ll r1 = 0, r5 = 0;
// Pass 1: Read array and calculate initial sums for index 1
for (ll i = 1; i <= n; i++) {
cin >> b[i];
if (b[i] == 1 || b[i] == 3) {
total_1++;
r1 += (i - 1); // Distance from index 1
}
if (b[i] == 2 || b[i] == 3) {
total_2++;
r5 += (i - 1); // Distance from index 1
}
}
ll left_1 = 0, left_2 = 0;
// Pass 2: Calculate for each index i by shifting the reference point
for (ll i = 1; i <= n; i++) {
cout << abs(r1 - r5) << " ";
// Update the count of elements seen so far (<= i)
if (b[i] == 1 || b[i] == 3) left_1++;
if (b[i] == 2 || b[i] == 3) left_2++;
// Shifting index from i to i+1:
// Elements on the left increase distance by 1, elements on the right decrease by 1
r1 += 2 * left_1 - total_1;
r5 += 2 * left_2 - total_2;
}
cout << "\n";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgbG9uZyBsb25nIGludCBsbDsKCmludCBtYWluKCkgewogICAgLy8gT3B0aW1pemUgc3RhbmRhcmQgSS9PIG9wZXJhdGlvbnMgZm9yIHNwZWVkCiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoTlVMTCk7CiAgICAKICAgIGxsIHQ7CiAgICBjaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBsbCBtLCBuOwogICAgICAgIGNpbiA+PiBtID4+IG47CiAgICAgICAgCiAgICAgICAgdmVjdG9yPGludD4gYihuICsgMSk7CiAgICAgICAgbGwgdG90YWxfMSA9IDAsIHRvdGFsXzIgPSAwOwogICAgICAgIGxsIHIxID0gMCwgcjUgPSAwOwogICAgICAgIAogICAgICAgIC8vIFBhc3MgMTogUmVhZCBhcnJheSBhbmQgY2FsY3VsYXRlIGluaXRpYWwgc3VtcyBmb3IgaW5kZXggMQogICAgICAgIGZvciAobGwgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgICAgIGNpbiA+PiBiW2ldOwogICAgICAgICAgICBpZiAoYltpXSA9PSAxIHx8IGJbaV0gPT0gMykgewogICAgICAgICAgICAgICAgdG90YWxfMSsrOwogICAgICAgICAgICAgICAgcjEgKz0gKGkgLSAxKTsgLy8gRGlzdGFuY2UgZnJvbSBpbmRleCAxCiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGJbaV0gPT0gMiB8fCBiW2ldID09IDMpIHsKICAgICAgICAgICAgICAgIHRvdGFsXzIrKzsKICAgICAgICAgICAgICAgIHI1ICs9IChpIC0gMSk7IC8vIERpc3RhbmNlIGZyb20gaW5kZXggMQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGxsIGxlZnRfMSA9IDAsIGxlZnRfMiA9IDA7CiAgICAgICAgCiAgICAgICAgLy8gUGFzcyAyOiBDYWxjdWxhdGUgZm9yIGVhY2ggaW5kZXggaSBieSBzaGlmdGluZyB0aGUgcmVmZXJlbmNlIHBvaW50CiAgICAgICAgZm9yIChsbCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICAgICAgY291dCA8PCBhYnMocjEgLSByNSkgPDwgIiAiOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBjb3VudCBvZiBlbGVtZW50cyBzZWVuIHNvIGZhciAoPD0gaSkKICAgICAgICAgICAgaWYgKGJbaV0gPT0gMSB8fCBiW2ldID09IDMpIGxlZnRfMSsrOwogICAgICAgICAgICBpZiAoYltpXSA9PSAyIHx8IGJbaV0gPT0gMykgbGVmdF8yKys7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBTaGlmdGluZyBpbmRleCBmcm9tIGkgdG8gaSsxOgogICAgICAgICAgICAvLyBFbGVtZW50cyBvbiB0aGUgbGVmdCBpbmNyZWFzZSBkaXN0YW5jZSBieSAxLCBlbGVtZW50cyBvbiB0aGUgcmlnaHQgZGVjcmVhc2UgYnkgMQogICAgICAgICAgICByMSArPSAyICogbGVmdF8xIC0gdG90YWxfMTsgCiAgICAgICAgICAgIHI1ICs9IDIgKiBsZWZ0XzIgLSB0b3RhbF8yOwogICAgICAgIH0KICAgICAgICBjb3V0IDw8ICJcbiI7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0=