线性基求交
void merge(Vector b) {
Vector c = *this;
Vector res;
for (int i = 0; i <= 63; ++i) {
if (b[i]) {
ull v = b[i], s = 0;
for (int j = 63; ~j; --j) {
if (v >> j & 1) {
if (p[j]) {
v ^= p[j], s ^= c[j];
if (v) continue;
res[i] = s;
}
else {
p[j] = v, c[j] = s;
}
break;
}
}
}
}
return *this = res, void();
}