eolymp
bolt
Попробуйте наш новый интерфейс для отправки задач
Задачи

Праздничные вычисления по сахарному модулю

Праздничные вычисления по сахарному модулю

Как вы уже знаете, Ральф мечтает стать лучшим в какой-нибудь игре, завоевать в ней золотую медаль и стать настоящим героем! На этот раз Ральф решил всем показать что он не только сильный и храбрый, но еще и очень умный, именно поэтому он отправился в игру "Праздничные вычисления по сахарному модулю".

Цель игры проста: игроку даются два числа. Используя калькулятор, требуется найти x xor y. Выражение x xor y обозначает применение операции побитового исключающего или (побитового сложения по модулю 2) к числам x и y. Данная операция есть во всех современных языках программирования, например, в языке C++ и Java она обозначается ˆ, в Pascal — xor.

Калькулятор хранит в памяти все числа, которые были получены игроком во время игры, а так же умеет складывать числа, вычитать их, умножать или целочисленно делить число на 2. При этом память калькулятора, конечно же, ограничена: он не может хранить более 1000 целых чисел. Кроме того, все числа, хранящиеся в калькуляторе должны лежать в диапазоне от 0 до 231 - 1 включительно. Изначально в памяти калькулятора лежат числа x и y. Игрок может использовать только числа, хранящиеся в памяти калькулятора.

Ральф - очень умный парень, вот только с Ванилопой снова стряслась беда, он спешит к ней на помощь. Поэтому стать лучшим в игре «Праздничные вычисления по сахарному модулю» придется именно вам!

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

В одной строке даны два целых числа x и y (1x, y109) - числа, которые изначально лежат в памяти калькулятора.

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

В первой строке выведите количество действий n (1n1000), которое нужно совершить игроку для победы в игре.

В каждой из последующих n строк выведите сначала тип действия, который вы хотите совершить на текущем шаге:

  • 1 - сложить два числа
  • 2 - вычесть из первого числа второе
  • 3 - умножить число на 2
  • 4 - целочисленно поделить число на 2.

Если тип операции 1 или 2, далее через пробел выведите два числа — номера итераций, на которых каждое из используемых чисел было получено. Если тип операции 3 или 4, выведите одно число - номер итерации, на которой используемое число было получено.

Например, чтобы вычесть из числа, полученного на итерации 3 число, полученное на итерации 4, следует вывести "2 3 4".

Будем считать, что числа x и y из входных данных были получены на 1-й и 2-й итерациях соответственно.

Обратите внимание, что число x xor y должно быть получено на последней итерации. От вас не требуется найти минимальный по количеству действий ответ.

Лимит времени 1 секунда
Лимит использования памяти 128 MiB
Входные данные #1
1 2
Выходные данные #1
7
4 2
4 3
1 3 4
1 4 5
1 4 5
3 7
1 6 8
Входные данные #2
15 4
Выходные данные #2
12
4 2
4 3
4 4
1 4 5
1 5 6
1 5 6
3 8
1 7 9
1 5 9
3 11
3 12
1 10 13
Источник 2018 Цикл Интернет-олимпиад для школьников, вторая командная олимпиада сезона, усложненная номинация, 10 ноября, Задача J