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

Задача . E. Вычисления за отрицательное время


Задача

Темы: Конструктив *3400

Все знают, что компьютеры становятся всё быстрее. Недавно берляндские учёные построили машину, которая может перемещать себя назад во времени!

Если быть точным, принцип её работы следующий. У машины есть бесконечная клетчатая плоскость, в одной из клеток которой стоит робот. Каждая клетка может или быть пустой, или содержать 0 или 1. Также у машины есть программа, состоящая из инструкций, обрабатываемых по одной. Каждая инструкция представляет собой один символ (букву или цифру) и исполняется за одну секунду, кроме последнего типа операций (это описано ниже). Вот список возможных инструкций:

  • 0 или 1: робот ставит соответствующую цифру в клетку, в которой он находится в настоящее время. Если эта клетка уже содержит цифру, эта цифра перезатирается.
  • e (erase): робот стирает число из клетки, на которой стоит. Если клетка была пустой, ничего не происходит.
  • l, r, u или d: робот перемещается на одну клетку в соответствующем направлении (влево/вправо/вверх/вниз, left/right/up/down).
  • s (stay): робот ничего не делает на протяжении одной секунды.
  • t (time travel): положим \(x\) равным \(0\), если робот стоит на пустой клетке, иначе возьмём \(x\) на единицу больше, чем число в клетке с роботом (то есть \(x = 1\), если число в клетке с роботом равно \(0\), и \(x = 2\), если оно равно \(1\)). Затем машина перемещается назад во времени на \(x\) секунд. Это не меняет порядок инструкций, но меняет конфигурацию доски и положение робота на те, что были \(x\) секунд назад. Вы можете считать, что эта инструкция эквивалентна нажатию Ctrl-Z \(x\) раз.

Например, пусть доска изначально пуста, а программа есть sr1t0. Считаем, что робот изначально находится в клетке \((0, 0)\).

  • [секунда \(0\), команда s]: мы ничего не делаем.
  • [секунда \(1\), команда r]: мы теперь в \((1, 0)\).
  • [секунда \(2\), команда 1]: мы в \((1, 0)\), и теперь там стоит \(1\).
  • [секунда \(3\), команда t]: мы перемещаемся на \(1 + 1 = 2\) секунды назад, к началу секунды \(1\).
  • [секунда \(1\), команда 0]: мы снова в \((0, 0)\), все клетки снова пусты, но после этой инструкции в нашей клетке стоит \(0\). Мы только что переписали историю. Последствий третьей операции никогда не было.

Теперь берляндские учёные хотят использовать свою машину на практике. Например, они хотят научиться складывать два числа.

Считаем, что начальная конфигурация машины следующая:

  • Одно натуральное (то есть, целое и положительное) число написано в двоичной системе на доске так, что его последняя цифра находится в клетке \((0, 1)\), число записано слева направо в порядке от старших к младшим битам.
  • Другое натуральное число написано в двоичной системе таким образом, что его последняя цифра находится в \((0, 0)\), число записано слева направо в порядке от старших к младшим битам.
  • Остальные клетки пусты.
  • Робот находится в клетке \((0, 0)\).
  • Так было всегда в прошлом; то есть если Вам удастся попасть в какой-нибудь отрицательный момент времени, доска всегда выглядела именно так, и робот вечно был в точке \((0, 0)\).

Напишите программу, после выполнения которой:

  • робот стоит на непустой клетке,
  • если прочитать число, записанное с этой клетки вправо до первой пустой клетки, мы получим двоичную запись числа \(a + b\), записанную слева направо в порядке от старших к младшим битам.

Заметьте, что ограничений на другие клетки нет. В частности, ничего страшного, если после выполнения всех инструкций клетка непосредственно слева от робота будет непустой.

В каждом тесте Вам будут даны \(1000\) пар чисел \((a, b)\), и Ваша программа должна будет корректно отработать на всех этих парах. Также из-за небольшой памяти машины, Ваша программа не должна занимать больше \(10^5\) инструкций.

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

В первой строке записано одно число \(t\) (\(1\le t\le 1000\)) — количество тестовых пар. В каждой из следующих \(t\) строк записаны по два натуральных числа \(a\) и \(b\) (\(1\le a, b < 2^{30}\)) в десятичной системе счисления.

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

В единственной строке выведите Вашу программу, содержащую не больше \(10^5\) символов из 01eslrudt.

Обратите внимание, что формально Вы не обязаны выдавать одну и ту же программу в каждом тесте.


Примеры
Входные данныеВыходные данные
1 2
123456789 987654321
555555555 555555555
0l1l1l0l0l0l1l1l1l0l1l0l1l1l0l0l0l1l0l1l1l1l0l0l0l1l0l0l0l0l1l0lr

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

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