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

Задача . D. Змейка


Напомним правила одной очень популярной игры, которая называется «Змейка» (эта игра также известна как «Удав», «Питон» или «Червяк»).

Игровое поле представляет собой прямоугольную таблицу размера n × m. Некоторые клетки поля считаются непроходимыми (стены), все остальные клетки поля проходимы.

Вы управляете змейкой, которая состоит из сегментов. Каждый сегмент занимает ровно одну проходимую клетку поля, причем в любой проходимой клетке находится не более одного сегмента. Все сегменты пронумерованы целыми числами от 1 до k, где k — длина змейки. Сегмент с номером 1 называется головой, а с номером k — хвостом. Для любого i (1 ≤ i < k) клетки поля, в которых находятся сегменты с номерами i и i + 1, являются соседними, то есть имеют общую сторону.

В одной из проходимых клеток поля находится яблоко. Цель змейки — достичь яблока и съесть его (то есть сделать так, чтобы голова оказалась в той же клетке, где и яблоко).

В процессе игры змейка двигается. За один ход змейка может переместить голову в одну из соседних клеток поля. При этом все остальные сегменты подтягиваются за головой. То есть каждый сегмент с номером i (1 < i ≤ k) перемещается в клетку, где только что находился сегмент с номером i - 1. Считайте, что перемещение всех сегментов, включая голову, происходит одновременно (смотри второй тестовый пример). Если после хода голова змейки оказывается в непроходимой клетке или в клетке, в которой находится другой сегмент, то змейка умирает. Поэтому такие ходы мы будем считать недопустимыми.

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

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

В первой строке записаны два целых числа через пробел n и m (1 ≤ n, m ≤ 15) — количество строк и столбцов игрового поля.

В следующих n строках описано игровое поле. В каждой из этих строк записано по m символов. Символ «#» обозначает стену, «.» обозначает проходимую клетку, «@» обозначает яблоко. Сегмент змейки номер один обозначается символом «1», сегмент номер два — символом «2» и так далее.

Описание игрового поля не содержит никаких символов кроме «#», «.», «@» и цифр (кроме цифры 0). Гарантируется, что описанное поле корректно. Гарантируется, что на описанном поле находится ровно одно яблоко и ровно одна змейка, длина которой не меньше 3 и не больше 9.

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

В выходной файл выведите единственное целое число — наименьшее количество ходов, необходимое для достижения яблока. Если яблока достичь невозможно, выведите -1.


Примеры
Входные данныеВыходные данные
1 4 5
##...
..1#@
432#.
...#.
4
2 4 4
#78#
.612
.543
..@.
6
3 3 2
3@
2#
1#
-1

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

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