#include <bits/stdc++.h>
#define rep(_i, _j) for(int _i = 1; _i <= _j; ++_i)
const int INF = 0x3f3f3f3f;
typedef long long LL;
typedef double DB;
using namespace std;
int f, n;
const int maxn = 100000 + 20;
bool calced[maxn];
int sg[maxn];
int work(int p) {
if(calced[p]) {
return sg[p];
}
calced[p] = true;
if(p < f) {
return sg[p] = 0;
}
bool hash[maxn];
memset(hash, false, sizeof hash);
for(int i = 2; i <= p; i = p / (p / i) + 1) {
for(int j = i; j <= i + 1 && j <= p; ++j) {
int status = 0;
int time = p - (p / j) * j;
if(time & 1) {
status ^= work(p / j + 1);
}
if((j - time) & 1) {
status ^= work(p / j);
}
hash[status] = true;
}
}
for(int i = 0; ; ++i) {
if(!hash[i]) {
return sg[p] = i;
}
}
}
int main() {
int t, m;
scanf("%d%d", &t, &f);
while(t--) {
scanf("%d", &n);
int res = 0;
for(int i = 1; i <= n; ++i) {
scanf("%d", &m);
res ^= work(m);
}
printf("%d", res > 0);
if(t == 0) {
puts("");
} else {
putchar(' ');
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgcmVwKF9pLCBfaikgZm9yKGludCBfaSA9IDE7IF9pIDw9IF9qOyArK19pKQpjb25zdCBpbnQgSU5GID0gMHgzZjNmM2YzZjsKdHlwZWRlZiBsb25nIGxvbmcgTEw7CnR5cGVkZWYgZG91YmxlIERCOwp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCmludCBmLCBuOwpjb25zdCBpbnQgbWF4biA9IDEwMDAwMCArIDIwOwpib29sIGNhbGNlZFttYXhuXTsKaW50IHNnW21heG5dOwoKaW50IHdvcmsoaW50IHApIHsKCWlmKGNhbGNlZFtwXSkgewoJCXJldHVybiBzZ1twXTsKCX0KCWNhbGNlZFtwXSA9IHRydWU7CglpZihwIDwgZikgewoJCXJldHVybiBzZ1twXSA9IDA7Cgl9Cglib29sIGhhc2hbbWF4bl07CgltZW1zZXQoaGFzaCwgZmFsc2UsIHNpemVvZiBoYXNoKTsKCWZvcihpbnQgaSA9IDI7IGkgPD0gcDsgaSA9IHAgLyAocCAvIGkpICsgMSkgewoJCWZvcihpbnQgaiA9IGk7IGogPD0gaSArIDEgJiYgaiA8PSBwOyArK2opIHsKCQkJaW50IHN0YXR1cyA9IDA7CgkJCWludCB0aW1lID0gcCAtIChwIC8gaikgKiBqOwoJCQlpZih0aW1lICYgMSkgewoJCQkJc3RhdHVzIF49IHdvcmsocCAvIGogKyAxKTsKCQkJfQoJCQlpZigoaiAtIHRpbWUpICYgMSkgewoJCQkJc3RhdHVzIF49IHdvcmsocCAvIGopOwoJCQl9CgkJCWhhc2hbc3RhdHVzXSA9IHRydWU7CgkJfQoJfQoJZm9yKGludCBpID0gMDsgOyArK2kpIHsKCQlpZighaGFzaFtpXSkgewoJCQlyZXR1cm4gc2dbcF0gPSBpOwoJCX0KCX0KfQoKaW50IG1haW4oKSB7CglpbnQgdCwgbTsKCXNjYW5mKCIlZCVkIiwgJnQsICZmKTsKCXdoaWxlKHQtLSkgewoJCXNjYW5mKCIlZCIsICZuKTsKCQlpbnQgcmVzID0gMDsKCQlmb3IoaW50IGkgPSAxOyBpIDw9IG47ICsraSkgewoJCQlzY2FuZigiJWQiLCAmbSk7CgkJCXJlcyBePSB3b3JrKG0pOwoJCX0KCQlwcmludGYoIiVkIiwgcmVzID4gMCk7CgkJaWYodCA9PSAwKSB7CgkJCXB1dHMoIiIpOwoJCX0gZWxzZSB7CgkJCXB1dGNoYXIoJyAnKTsKCQl9Cgl9CgoJcmV0dXJuIDA7Cn0K