Олимпиадный тренинг

Задача . F. XORофикатор 3000


Алиса уже много лет дарит подарки Бобу, а потому знает, что больше всего ему нравится делать побитовый XOR интересных чисел, при этом интересными Боб считает такие целые положительные числа \(x\), для которых выполнено \(x \not\equiv k (\bmod 2^i)\). Поэтому в этом году на его очередной день рождения она подарила ему сверхмощный «XORофикатор 3000», самую последнюю модель.

Бобу подарок очень понравился, ведь благодаря нему он мог мгновенно делать XOR всех интересных чисел на любом отрезке от \(l\) до \(r\) включительно, а что, в самом деле, ещё нужно человеку для счастья? Но, к сожалению, прибор оказался настолько мощным, что в какой-то момент сделал XOR с самим собой и исчез. Боб был очень расстроен, и Алиса, чтобы хоть как-то подбодрить его, попросила вас написать свою версию «XORофикатора».

Входные данные

Первая строка входных данных содержит одно целое число \(t\) \((1 \leq t \leq 10^4)\) — количество запросов XOR на отрезке. Далее следуют ровно \(t\) строчек запросов, состоящих из чисел \(l\), \(r\), \(i\), \(k\) \((1 \leq l \leq r \leq 10^{18}\), \(0 \leq i \leq 30\), \(0 \leq k < 2^i)\).

Выходные данные

Для каждого запроса выведите одно число — XOR всех чисел \(x\) на отрезке \([l, r]\) таких, что \(x \not\equiv k \mod 2^i\).

Примечание

В первом запросе на отрезке \([1, 3]\) интересными являются числа \(1\) и \(3\), поэтому ответом будет число \(1 \oplus 3 = 2\).


Примеры
Входные данныеВыходные данные
1 6
1 3 1 0
2 28 3 7
15 43 1 0
57 2007 1 0
1010 1993 2 2
1 1000000000 30 1543
2
2
13
0
4
1000000519

time 1000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w643
Комментарий учителя