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

Задача . C. Кроссворд


Задача

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

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

Помогите Васе — составьте кроссворд описанного вида из заданных шести слов. Разрешается использовать слова в любом порядке.

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

В шести строках записаны заданные слова. Каждое слово состоит не более чем из 30 и не менее чем из 3 больших латинских букв.

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

Если решения не существует, выведите Impossible. Иначе выведите искомый кроссворд. Все пустые клетки обозначайте точками.

Если решений несколько, выведите лексикографически наименьшее. Т. е. то решение, первая строчка которого меньше первой строчки других. При равенстве первых строк, сравнивайте вторые и т. д. Лексикографическое сравнение строк реализует оператор < в современных языках программирования.


Примеры
Входные данныеВыходные данные
1 NOD
BAA
YARD
AIRWAY
NEWTON
BURN
BAA...
U.I...
R.R...
NEWTON
..A..O
..YARD
2 AAA
AAA
AAAAA
AAA
AAA
AAAAA
AAA..
A.A..
AAAAA
..A.A
..AAA
3 PTC
JYNYFDSGI
ZGPPC
IXEJNDOP
JJFS
SSXXQOFGJUZ
JJFS....
Y..S....
N..X....
Y..X....
F..Q....
D..O....
S..F....
G..G....
IXEJNDOP
...U...T
...ZGPPC

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

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