EduBrick

F. Сколько точек с пометкой

3000 мс · 256 МБ · всё или ничего

В той же таблице, что в классной задаче F, посчитайте количество точек (x,y)(x, y) с 0≤x,y<2k0 \le x, y < 2^k, пометка которых равна cc.

Пометка равна x⊕yx \oplus y, значит нужно количество пар с x⊕y=cx \oplus y = c в квадрате со стороной 2k2^k.

Ответ короткий: если c≥2kc \ge 2^k, таких пар нет вовсе — исключающее «или» двух чисел меньше 2k2^k само меньше 2k2^k. Иначе для каждого из 2k2^k значений xx подходит ровно одно y=x⊕cy = x \oplus c, и оно тоже меньше 2k2^k. Значит, ответ равен 2k2^k.

Это хороший пример того, как битовая задача сводится к одной строчке после правильного наблюдения. Проверять такие ответы стоит перебором на маленьких kk — там всё видно.

Формат ввода

Первая строка содержит число tt (1≤t≤1051 \le t \le 10^5).

Далее идут tt строк по два числа: kk (0≤k≤600 \le k \le 60) и cc (0≤c<2620 \le c < 2^{62}).

Формат вывода

tt строк с ответами.

Примеры

ввод
3
2 1
2 5
0 0
вывод
4
0
1
Войдите, чтобы отправлять решения.