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

Задача . B. Коровоконг решает пазл


Задача

Темы: реализация *1400

Коровоконг обожает собирать пазлы.

Сейчас у него есть два одинаковых кусочка пазла, из которых требуется собрать прямоугольник. Каждый из кусочков описывается прямоугольником n на m, в каждой клетке которого стоит символ «X», если эта клетка является частью кусочка, и «.» если нет. Гарантируется, что все клетки кусочка образуют 4-связную (связную по стороне) область. Для лучшего понимания того, как задаётся один кусочек пазла, прочитайте формат входных данных и посмотрите на примеры.

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

Во входных данных вам даётся описание одного из двух одинаковых кусочков. Определите, можно ли совместить два кусочка и получить прямоугольник. Прямоугольник должен быть сплошным, то есть не должен содержать ни одной пустой клетки внутри или на границе. Не забывайте, что Коровоконг не может поворачивать или переворачивать кусочки пазла и что после наложения друг на друга кусочки не должны пересекаться, то есть никакие два «X» из разных кусочков не могут занимать одну клетку.

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

В первой строке входных данных записаны два числа n и m (1 ≤ n, m ≤ 500) — размеры прямоугольника, описывающего один кусочек пазла.

В следующих n строках содержится описание кусочка пазла. Каждая из них имеет длину m и состоит только из символов «.» и «X». Символ «X» означает, что данная клетка является частью кусочка, а «.» означает пустую клетку.

Гарантируется, что описание кусочка содержит хотя бы один символ «X> и что все «X» образуют 4-связную (то есть связную по стороне) область.

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

Выведите «YES», если Коровоконг может собрать прямоугольник, и «NO» в противном случае.

Примечание

В первом примере можно собрать прямоугольник следующим образом:


111222
111222

Во втором примере без использования поворотов и переворотов собрать прямоугольник нельзя.

В третьем примере можно сдвинуть один из кусочков на один вправо и получить следующий прямоугольник:


.....
..XX.
.....
.....
.....

Примеры
Входные данныеВыходные данные
1 2 3
XXX
XXX
YES
2 2 2
.X
XX
NO
3 5 5
.....
..X..
.....
.....
.....
YES

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

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