F. Игорь и гора
ограничение по времени на тест
5 секунд
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Посетители ИТ-кампуса «НЕЙМАРК» не только сильные программисты, но и физически крепкие люди! Кто-то занимается плаванием, кто-то — греблей, а кто-то — скалолазанием!

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

Игорь нашел прямоугольную вертикальную часть горы и мысленно разбил её на $$$n$$$ горизонтальных уровней. Каждый из уровней Игорь мысленно разбил вертикальными перегородками на $$$m$$$ участков. Осмотрев эти участки, Игорь нашел удобные выступы, за которые можно держаться руками (далее будем называть их зацепки). Итого, найденную часть горы можно представить в виде прямоугольника $$$n \times m$$$, в некоторых клетках которого расположены зацепки.

Как опытный программист, Игорь решил посчитать, сколько существует правильных трасс. Трасса — это последовательность различных участков с зацепками. Трасса считается правильной, если выполняются следующие условия:

  • первая зацепка трассы находится на самом нижнем уровне (строка $$$n$$$);
  • последняя зацепка трассы находится на самом верхнем уровне (строка $$$1$$$);
  • каждая следующая зацепка находится не ниже предыдущей;
  • на каждом уровне (то есть на каждой строке прямоугольника) используется хотя бы одна зацепка;
  • на каждом уровне используются максимум две зацепки (у Игоря всего две руки);
  • Игорь может дотянуться от текущей зацепки до следующей, если расстояние между центрами соответствующих участков не превосходит размаха рук Игоря.

Размах рук Игоря равен $$$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$$$.

Пример
Входные данные
3
3 4 1
XX#X
#XX#
#X#X
3 4 2
XX#X
#XX#
#X#X
3 1 3
X
X
#
Выходные данные
2
60
0
Примечание

Возможные трассы в первом примере:

Во втором примере размах рук Игоря стал больше, поэтому ему доступны новые трассы, например, такая:

В третьем примере на нижнем уровне нет зацепок, поэтому правильных трасс не существует.