E. QuadraPop
ограничение по времени на тест
0.5 секунд
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

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

У вас имеется поле в H строк и W столбцов. Каждая ячейка поля либо пуста, либо занята клеткой определённого цвета. Всего цветов 26 и они обозначены заглавными латинским буквами. На поле действует гравитация — клетка, под которой нет опоры, падает сверху вниз. Так же в игре есть параметр K — если существует связная область из K или более клеток одного цвета, то они уничтожаются. Связными считаются клетки, которые граничат стороной. После уничтожения области может снова начаться процесс падения клеток, который в конце снова спровоцирует уничтожение новых областей и так далее.

Вам дано поле и фигурка из двух клеток, которую нужно расположить вверху поля в любой клетке. Фигурку можно произвольно повернуть. Посчитайте все возможные различные исходы получения очков, которые можно получить. Очки начисляются следующим образом. Выпишем в хронологическом порядке все размеры уничтоженных за время игры областей, обозначим их sk (1 ≤ k ≤ n). Если две области уничтожились в один и тот же момент, раньше в списке идёт та область, у которой верхняя левая клетка находится выше (если и они на одной высоте, то та, которая из этих двух левее). Итоговый счёт игрока равен . Рассмотрите описание тестового примера для лучшего понимания.

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

В первой строке содержатся числа H, W и K, записанные через пробел (2 ≤ H ≤ 50; 1 ≤ W ≤ 50; 2 ≤ K ≤ 5000). В следующих H строках идёт описание поля. Каждая строка содержит W символов. Пустая ячейка обозначается символом «.», закрашенная — большой латинской буквой. В последней строке содержится падающая фигура (два больших латинских символа). Гарантируется, что две верхние строки поля пусты, что связные фигуры из клеток одного цвета имеют размер меньше K, а так же то, что нет падающих клеток.

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

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

Примеры
Входные данные
4 4 3
....
....
....
A.AA
AA
Выходные данные
3 4 5 
Входные данные
3 4 3
....
....
ABCD
CB
Выходные данные
0 
Входные данные
7 5 4
.....
.....
.....
....X
...XX
...AB
XXXCD
XX
Выходные данные
5 8 12 
Входные данные
7 5 3
.....
.....
..B..
A.B.A
C.C.C
ACBCA
ACBCA
CC
Выходные данные
0 22 23 34 
Примечание

Рассмотрим как получить 34 очка в четвёртом тестовом примере:

Шаг №1Шаг №2Шаг №3Шаг №4Шаг №5Шаг №6Шаг №7Шаг №8
.CC.....................................
.......С....С...........................
..B....B....B....С....С....С............
A.B.AA.B.AA.B.A..B.A....A....A....A....A
C.C.CCCC.C....CA.B.CA...C....C....C....C
ACBCAACBCAA.BCAA.BCAA..CA...CA...CA....A
ACBCAACBCAA.BCAA.BCAA..CA...CA..CCA....A
На 3-ем шаге уничтожилась область из букв «C», мы получаем 5 × 1 = 5 очков. На 5-ом шаге уничтожилась область из букв «B», мы получаем 4 × 2 = 8 очков. На 6-ом шаге уничтожилась область из букв «A», мы получаем 3 × 3 = 9 очков. На 8-ом шаге уничтожилась область из букв «C», мы получаем 3 × 4 = 12 очков. Итого 5 + 8 + 9 + 12 = 34 очка.