| Codeforces Round 1013 (Div. 3) |
|---|
| Закончено |
Посетители ИТ-кампуса «НЕЙМАРК» не только сильные программисты, но и физически крепкие люди! Кто-то занимается плаванием, кто-то — греблей, а кто-то — скалолазанием!
Мастер Игорь — опора скалолазного движения в регионе. Однажды он пошел в поход в горы, чтобы подняться на вершину одной из них. Как опытный скалолаз, Игорь решил не подниматься в гору по тропинкам, а использовать свои навыки, чтобы подняться в гору строго вертикально.
Игорь нашел прямоугольную вертикальную часть горы и мысленно разбил её на $$$n$$$ горизонтальных уровней. Каждый из уровней Игорь мысленно разбил вертикальными перегородками на $$$m$$$ участков. Осмотрев эти участки, Игорь нашел удобные выступы, за которые можно держаться руками (далее будем называть их зацепки). Итого, найденную часть горы можно представить в виде прямоугольника $$$n \times m$$$, в некоторых клетках которого расположены зацепки.
Как опытный программист, Игорь решил посчитать, сколько существует правильных трасс. Трасса — это последовательность различных участков с зацепками. Трасса считается правильной, если выполняются следующие условия:
Размах рук Игоря равен $$$d$$$, то есть он может перейти с одной зацепки на другую, если Евклидово расстояние между центрами соответствующих участков не превосходит $$$d$$$. Расстояние между участками ($$$i_1, j_1$$$) и ($$$i_2, j_2$$$) равняется $$$\sqrt{(i_1 - i_2) ^ 2 + (j_1 - j_2) ^ 2}$$$.
Посчитайте, сколько существует различных правильных трасс. Две трассы считаются различными, если они отличаются списком используемых участков или порядком следования этих участков.
Первая строка содержит целое число $$$t$$$ ($$$1 \leq t \leq 10^3$$$) — количество наборов входных данных.
В первой строке каждого набора входных данных содержится три натуральных числа — $$$n$$$, $$$m$$$ и $$$d$$$ ($$$2 \leq n \leq 2000$$$, $$$1 \leq m, d \leq 2000$$$).
Каждая из следующих $$$n$$$ строк содержит $$$m$$$ символов — описание очередного уровня горы. Символ '#' соответствует пустому участку, а символ 'X' — участку с зацепкой. Уровни описываются сверху-вниз.
Гарантируется, что сумма $$$n \cdot m$$$ по всем наборам входных данных не превышает $$$4 \cdot 10^6$$$.
Для каждого набора входных данных выведите одно число — количество различных трасс. Поскольку это число может быть очень большим, выведите его остаток от деления на $$$998244353$$$.
33 4 1XX#X#XX##X#X3 4 2XX#X#XX##X#X3 1 3XX#
2 60 0
Возможные трассы в первом примере:
Во втором примере размах рук Игоря стал больше, поэтому ему доступны новые трассы, например, такая:
В третьем примере на нижнем уровне нет зацепок, поэтому правильных трасс не существует.
| Название |
|---|


