Лабиринт представляет собой матрицу MxN, некоторые
ячейки которой пустые, а остальные заполнены камнями. В одной из пустых ячеек
находится клад, а в другой — кладотолкатель. Кладотолкатель и клад не могут
находиться в ячейках, заполненных камнями, за пределами лабиринта, а также
одновременно в одной и той же ячейке. Кладотолкатель может передвигаться в
соседнюю ячейку (соседними считаются ячейки, граничащие по стороне), а также
передвигать клад следующим образом: нужно встать в соседнюю к кладу ячейку и
толкнуть его от себя. При этом клад передвинется в соседнюю ячейку в
направлении, заданном толчком, а кладотолкатель переместится в ячейку, где
только что находился клад.
Требуется
написать программу, которая определяет последовательность толчков и
передвижений кладотолкателя, следуя которой клад можно передвинуть к выходу
(выход находится в пустой ячейке). Так как клад очень тяжелый, количество
толчков должно быть минимальным. При наличии нескольких оптимальных
последовательностей следует указать любую из них.
Формат входных данных:
Первая строка входного файла содержит числа М и
N
.
Следующие М строк содержат описание лабиринта. Каждая строка состоит из N
символов, описывающих ячейки лабиринта: заполненная камнями ячейка обозначается
латинской буквой 'X', пустая ячейка обозначается символом '.' (ASCII код 46), начальная позиция кладотолкателя — буквой 'Y',
начальная позиция клада — латинской буквой 'В', выход — латинской буквой 'Т'.
Формат выходных данных:
Если решения не
существует, то файл должен cодержать слово 'NO'. Иначе, в первой строке
выходного файла должно содержаться слово 'YES', а во второй строке —
последовательность символов, определяющая действия кладотолкателя, в частности,
символы 'w', 'e', 'n', 's' обозначают передвижения
кладотолкателя на запад, восток, север и юг соответственно, а символы 'W', 'E', 'N', 'S' обозначают толчки кладотолкателя в
соответствующих направлениях.
Пример файлов входных и
выходных данных:
stdin
|
stdout
|
3 3
..Y
.B.
TXX
|
YES
sWnwS
|