Задача №113258. Лорел Крик

Лорел Крик "— речка, делящая кампус университета Ватерлоо на две части. В речке обитают такие опасные создания, как гуси и бобры. В этой задаче вам придется найти способ переправиться через речку, не промокнув.

Чтобы этого добиться, требуется использовать пни, торчащие в некоторых местах из воды. На пне можно спокойно стоять, не боясь промокнуть. Чтобы перебраться с одного пня на другой, можно использовать брёвна, соединяющие их.

Но даже если добраться по брёвнам до конечной точки невозможно, ещё не все потеряно. Вы можете подобрать любое бревно, примыкающее к пню, на котором вы находитесь, и положить его в каком-то другом месте, так чтобы оно вело к какому-то другому пню. Чтобы можно было взять бревно (равно как и чтобы двигаться по нему), оно должно быть правильно ориентировано, например в конфигурации « S-S » бревно примыкает к двум пням, а в конфигурации « S|S » "— нет.

Для простоты, река размечена квадратной сеткой. Каждый пень находится в какой-то клетке этой сетки. Два пня помечены как начальный и конечный. Два пня, находящиеся в одной строке или столбце, могут быть соединены бревном. В каждый момент времени можно сделать один из следующих ходов:

  • Пройти по бревну, которое примыкает к пню, на котором вы находитесь, до другого конца этого бревна, до пня, примыкающего к другому концу этого бревна.
  • Подобрать бревно, примыкающее к пню, на котором вы находитесь. Более одного бревна в каждый момент времени нести нельзя.
  • Положить бревно, которое у вас в руках так, чтобы оно соединило пень, на котором вы находитесь, с каким-то другим пнём. Бревно должно быть точно той длины, которая требуется, чтобы соединить эти пни. Бревно должно полностью находиться в воде, нельзя соединять два пня бревном, если посередине находится третий пень, или если уложенное бревно пересечётся с каким-то другим бревном, уже находящимся в воде.

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

Во входном потоке находится описание реки в следующем формате. В первой строке ввода находятся два числа r и c "— количество строк и столбцов в квадратной сетке, соответственно (1 ≤ r , c ≤ 15) . Далее следует r строк по c символов. Символ « S » обозначает пень. Символы « B » и « E » обозначают стартовый и конечный пни, соответственно. Последовательность символов « - » или « | » обозначает бревно, длина которого пропорциональна количеству символов. Символ « . » обозначает клетку, в которой нет ни пней, ни брёвен. В реке находится не более 15 пней. Гарантируется, что начальная конфигурация корректна, то есть каждое бревно примыкает к двум пням.

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

Выведите единственное число "— минимальное количество ходов, которое потребуется для того, чтобы добраться до конечного пня из начальной конфигурации. Если добраться невозможно, выведите единственное число 0.

Примеры
Входные данные
7 11
....S......
....|......
B---S......
...........
...........
...........
....S.S...E
Выходные данные
10
Сдать: для сдачи задач необходимо войти в систему