Ուղարկել | Բոլոր լուծումները | Լավագույն լուծումները | Վերադառնալ ցուցակին |
ACM_0013 - HACK |
Однажды грабитель проник в квартиру. Но он столкнулся трудностью: всё ценное хранится в сейфе с кодовым замком. Устройство кодового замка нехитрое, колесо с числами от 1 до N, которое нужно покрутить туда-сюда несколько раз. Но открывающая сейф комбинация поворотов неизвестна, поэтому грабитель оставил возле сейфа подслушивающее устройство и покинул квартиру, чтобы вернуться позже.
Когда владелец сейфа открывал замок, подслушивающее устройство зафиксировало количество щелчков при повороте колеса. Теперь грабителю известно, на сколько позиций нужно крутить колесо, но неизвестно, в какую сторону. Грабитель видел, в каком положении было колесо до открытия сейфа, и в каком положении оно осталось после закрытия. Поворот колеса в сторону последовательного увеличения чисел обозначим буквой U (up), а поворот в сторону последовательного уменьшения чисел обозначим буквой D (down). Например, на колесе 7 чисел от 1 до 7, изначально установлено 7, после открытия установлено число 2, и зафиксировано 3 поворота, длиной в 3, 5, 4 чисел. Тогда возможной открывающей комбинацией будет UDU: первое U сменит числа 7→1→2→3, потом D сменит числа 3→2→1→7→6→5, потом U сменит числа 5→6→7→1→2. Стоит заметить, что для данного примера это не единственная возможная последовательность: DDD также превратит 7 в 2: 7→6→5→4, 4→3→2→1→7→6, 6→5→4→3→2.
Грабитель хочет узнать, сколько существует способов перевести колесо из начального положения в конечное, а также найти среди них лексикографически младший (из вариантов DDD и UDU выбирается DDD, поскольку DDD < UDU). Также возможно, что владелец сейфа обманул грабителя, тогда построить последовательность не получится.
Входные данные
Первая строка входного файла содержит число тестов T (T ≤ 200).
Описание каждого теста состоит из двух строк.
В первой строке четыре целых числа: L - количество чисел на сейфе, S - начальное положение колеса, F - конечное положение колеса, N - количество поворотов (1 ≤ L, N ≤ 50, 1 ≤ S, F ≤ L). В следующей строке N чисел ci – описание поворотов (1 ≤ сi ≤ 50).
Выходные данные
Для каждого теста в отдельной строке вывести количество способов перевести колесо из начального положения в конечное. И, если оно ненулевое, то через пробел вывести лексикографически младшую последовательность поворотов.
Примеры входных и выходных данных
№ |
stdin |
stdout |
1 |
3 7 7 2 3 3 5 4 7 7 7 3 3 5 4 5 1 1 6 1 1 1 1 1 1 |
2 DDD 0 20 DDDUUU |
Ավելացրեց. | Հրանտ Հովհաննիսյան |
Ամսաթիվ. | 2013-12-08 |
Ժամանակի սահմանափակումը. | 1s |
Ծրագրի տեքստի սահմանափակումը. | 50000B |
Memory limit: | 1536MB |
Cluster: | Cube (Intel G860) |
Լեզուներ. | Բոլորը բացի ASM32 ASM64 GAWK CLPS CLOJURE D ERL FSHARP FORTRAN GOSU HASK ICON ICK NEM NIM OBJC-CLANG PICO PIKE PYPY PYPY3 PY_NBC RUST SCM guile CHICKEN SED TCL WHITESPACE |
Աղբյուրը. | East Sibirean QF 2013.E |