Задача №114875. На заводе

Есть подозрение, что военный завод на окраине города причастен к серии недавних преступлений. Бюро общественной безопасности направило инспектора Акане выяснить, так ли это.

У Акане есть прямоугольная карта завода, являющаяся таблицей \(m \times n\). Каждая ячейка карты или является пустой, или содержит один из цехов завода. Разумеется, все цеха завода клеточно связаны, иначе говоря, от любого цеха до любого другого можно добраться через промежуточные цеха, переходя между цехами только по общей стороне. Также гарантируется, что завод не огораживает территорию, не являющуюся заводом, то есть от любой ячейки, не являющейся территорией завода, можно добраться до границы карты, переходя между ячейками, не являющимися цехами завода, по общей стороне.

Акане предполагает, что если на заводе и есть какие-то улики, то искать их в центре какого-либо цеха бесполезно. Гораздо вероятнее, что они находятся в углу цеха. Для упомянутой карты рассмотрим все узлы сетки, являющиеся углом хотя бы одного цеха. Акане называет такие узлы важными. Количество важных узлов, очевидно, не превосходит \((m + 1) \cdot (n + 1)\). Акане выяснила, что для каждой клетки с цехом, по её краям проложены коридоры, которые соединяют соседние узлы сетки, расположенные в углах этой клетки.

Акане хочет обойти все важные узлы, причём сделать это как можно более эффективно. А именно, Акане хочет составить маршрут по узлам сетки, такой что:

  • маршрут начинается и заканчивается в одном и том же узле;
  • между каждыми двумя узлами Акане переходит по коридорам;
  • каждый важный узел посещается хотя бы один раз;
  • маршрут проходит только по важным узлам;
  • по каждому коридору Акане проходит не более одного раза.

Помогите Акане найти любой подходящий маршрут, или определите, что таковых не существует. Обратите внимание, что минимизировать длину маршрута не требуется.

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

Первая строка содержит числа \(m\) и \(n\) (\(1 \le m, n \le 20\)) — размеры карты с заводом.

Следующие \(m\) строк содержат по \(n\) символов и задают карту завода. Символ « * » обозначает цех, а « . » — пустое место на карте.

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

Если обойти завод нельзя, выведите « No ».

Иначе выведите « Yes », затем выведите количество коридоров, по которым пройдёт Акане в найденном маршруте.

Затем выведите сам маршрут, по одному узлу в строке. Пронумеруем линии сетки, разделяющие ячейки карты, горизонтальные от \(0\) до \(m\) сверху вниз, вертикальные от \(0\) до \(n\) слева направо. Каждый узел описывается двумя числами: \(r_i\) и \(c_i\) (\(0 \le r_i \le m\), \(0 \le c_i \le n\)) — номерами линий сетки, на пересечении которых он расположен.

Примеры
Входные данные
3 3
***
***
.**
Выходные данные
Yes
16
0 0
0 1
1 1
1 2
1 3
0 3
0 2
1 2
2 2
2 3
3 3
3 2
3 1
2 1
2 0
1 0
Входные данные
1 4
****
Выходные данные
Yes
10
0 0
0 1
0 2
0 3
0 4
1 4
1 3
1 2
1 1
1 0
Входные данные
2 2
**
**
Выходные данные
No
Сдать: для сдачи задач необходимо войти в систему