Logo
(追記) (追記ここまで)

28819번 - Праздничные вычисления по сахарному модулю 스페셜 저지다국어

시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 1024 MB127763.636%

문제

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

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

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

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

입력

В первой строке даны два целых числа $x$ и $y$ --- числа, которые изначально лежат в памяти калькулятора (1ドル \leq x, y \leq 10^9$).

출력

В первой строке выведите $n$ --- количество действий, которое нужно совершить игроку для победы в игре (1ドル \leq n \leq 1000$).

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

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

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

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

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

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

제한

예제 입력 1

1 2

예제 출력 1

3
3 1
4 2
1 3 4

예제 입력 2

15 4

예제 출력 2

1
2 1 2

힌트

출처

Olympiad > Russian Olympiad in Informatics > Internet Olympiads in Informatics > 2018-2019 Season > November 10, 2018 > Advanced J번

(追記) (追記ここまで)

출처

대학교 대회

  • 사업자 등록 번호: 541-88-00682
  • 대표자명: 최백준
  • 주소: 서울시 서초구 서초대로74길 29 서초파라곤 412호
  • 전화번호: 02-521-0487 (이메일로 연락 주세요)
  • 이메일: contacts@startlink.io
  • 통신판매신고번호: 제 2017-서울서초-2193 호

AltStyle によって変換されたページ (->オリジナル) /