EduBrick

C. Три команды над битом

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

Как классная задача C, но команд три: установить бит, снять бит и инвертировать бит.

Все три — из одной таблицы, и различаются только операцией:

команда выражение
установить A | (1ULL << i)
снять A & ~(1ULL << i)
инвертировать A ^ (1ULL << i)

Полезно понимать, почему именно так. Логическое «или» с единицей всегда даёт единицу; логическое «и» с нулём всегда даёт ноль; исключающее «или» с единицей меняет значение. Во всех трёх случаях остальные биты не задеваются, потому что маска в них нулевая (а для «и» — единичная).

Формат ввода

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

Далее идут tt строк по три числа: команда (11 — установить, 22 — снять, 33 — инвертировать), число AA (0≤A≤10180 \le A \le 10^{18}) и номер бита ii (0≤i≤620 \le i \le 62).

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

tt строк с результатами.

Примеры

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