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

Задача . B. Сбор посылок


На складе есть робот и \(n\) посылок, которые он хочет собрать. Склад можно представить в виде координатной сетки. Изначально робот находится в точке \((0, 0)\). \(i\)-я посылка находится в точке \((x_i, y_i)\). Гарантируется, что в одной точке не могут находиться две посылки. Также гарантируется, что в точке \((0, 0)\) посылки нет.

Робот наполовину сломан и может передвигаться только вверх ('U') и вправо ('R'). Другими словами, за один шаг робот может переместиться из точки \((x, y)\) в точку (\(x + 1, y\)) или в точку \((x, y + 1)\). Как сказано выше, робот хочет собрать все \(n\) посылок (в любом порядке). Он хочет сделать это за минимально возможное число шагов. Если существует несколько подходящих последовательностей шагов, робот хочет выбрать лексикографически минимальный путь.

Строка \(s\) длины \(n\) лексикографически меньше, чем строка \(t\) длины \(n\) если существует такой индекс \(1 \le j \le n\), что для всех \(i\) от \(1\) до \(j-1\) \(s_i = t_i\) и \(s_j < t_j\). Это обычное сравнение строк, например, в словаре строки расположены в лексикографическом порядке. Большинство языков программирования сравнивают строки именно так.

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

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 1000\)) — количество посылок на складе.

Следующие \(n\) строк содержат описания посылок. \(i\)-я посылка задана в виде двух целых чисел \(x_i\) и \(y_i\) (\(0 \le x_i, y_i \le 1000\)) — \(x\)-координаты посылки и \(y\)-координаты посылки.

Гарантируется, что в каждой точке находится не более одной посылки. Также гарантируется, что в точке \((0, 0)\) посылки нет.

Сумма \(n\) по всем наборам входных данных в тесте не превосходит \(1000\).

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

Для каждого набора входных данных выведите ответ.

Если невозможно собрать все \(n\) посылок в каком-либо порядке, стартуя из точки (\(0,0\)), выведите «NO» первой строкой.

Иначе выведите «YES» первой строкой. Затем выведите кратчайший путь (строку), состоящий из символов 'R' и 'U'. Среди всех таких путей нужно выбрать лексикографически минимальный.

Заметьте, что в этой задаче «YES» и «NO» могут быть выведены только в верхнем регистре, то есть «Yes», «no» и «YeS» не принимаются.

Примечание

Для первого набора данных из указанного примера оптимальный путь RUUURRRRUU выглядит следующим образом:


Примеры
Входные данныеВыходные данные
1 3
5
1 3
1 2
3 3
5 5
4 3
2
1 0
0 1
1
4 3
YES
RUUURRRRUU
NO
YES
RRRRUUU

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

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