eolymp
bolt
Спробуйте наш новий інтерфейс для відправки розв'язків
Задачі

Схемы маршрутизации

Схемы маршрутизации

Рассмотрим сеть из n вершин, помеченных 1..n. Каждая вершина обозначена как посылатель, получатель или ни то, ни другое. Количество посылателей S равно количеству получателей (S1).

Связи между двумя вершинами в сети могут быть описаны как список направленных ребер каждое в виде ij, обозначающее, что вершина i может передать информацию вершине j. Интересно, что все эти рёбра удовлетворяют свойству i < j, кроме k которые удовлетворяют свойству i > j (0k2). Нет циклов (ребер вида ii).

Описание схемы маршрутизации состоит из множества S направленных путей от посылателей к получателям таких, что никакие два из этих путей не имею общую конечную точку. То есть пути соединяют различных посылателей с различными получателями. Путь от посылателя s к получателю r может быть описан как последовательность вершин

s = v0v1v2 → ... → ve = r

такая что направленные ребра vivi+1 существуют для всех 0i < e. Одна вершина может появиться более чем один раз в одном и том же пути.

Посчитайте количество различных схем маршрутизации, таких, что каждое направленное ребро проходится ровно один раз. Поскольку ответ может быть очень большим, выводите его по модулю 109 + 7. Гарантируется, что существует хотя бы одна схема маршрутизации, удовлетворяющая ограничениям.

Каждый ввод содержит t тестов. Гарантируется, что сумма n2 всех тестов не превысит 2 * 104.

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

Первая строка содержит количество тестов t (1t20).

Первая строка каждого теста содержит целые числа n (2n100) и k. Заметим, что S не определяется явно во вводе.

Вторая строка каждого теста содержит строку длины n. i-ый символ строки равен S если i-ая вершина посылатель, R - если i-ая вершина получатель, . - если i-ая вершина ни то, ни другое. Количества символов R и S равны. Есть хотя бы один символ S.

Каждая из n последующих строк теста содержит битовую строку из n нулей и единиц. j-ый бит в i-ой строке равен 1, если существует направленное ребро от вершины i к вершине j, и 0 в протвном случае. Поскольку петель нет, на главной диагонали все нули. Более того имеется ровно k единиц ниже главной диагонали.

Последовательные тесты разделены пустыми строками для читабельности.

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

Для каждого теста выведите количество схем маршрутизации таких, что каждое ребро проходится ровно один раз, по модулю 109 + 7. Гарантируется, что существует хотя бы одна валидная схема маршрутизации.

Пример 1

Для первого теста ребра таковы 13, 23, 34, 35, 46, 56, 67, 68.

Имеется четыре схемы маршрутизации:

1 → 3 → 4 → 6 → 7, 2 → 3 → 5 → 6 → 8
1 → 3 → 5 → 6 → 7, 2 → 3 → 4 → 6 → 8
1 → 3 → 4 → 6 → 8, 2 → 3 → 5 → 6 → 7
1 → 3 → 5 → 6 → 8, 2 → 3 → 4 → 6 → 7

Для второго теста 14, 24, 34, 45, 46, 47, 810, 910, 1011, 1012.

Одна из возможных схем маршрутизации:

1 → 4 → 5
2 → 4 → 7
3 → 4 → 6
8 → 10 → 12
9 → 10 → 11

В общем случае посылатели {1, 2, 3} могут маршрутизироваться некоторой перестановкой получателей {5, 6, 7}, и посылатели {8, 9} могут маршрутизироваться некоторой перестановкой получателей {11, 12} давая ответ 6 * 2 = 12.

Пример 2

Для первого теста, ребра 13, 15, 23, 31, 34.

имеется три схемы маршрутизации:

1 → 3 → 1 → 5, 2 → 3 → 4
1 → 3 → 4, 2 → 3 → 1 → 5
1 → 5, 2 → 3 → 1 → 3 → 4

Для второго теста 13, 24, 32, 36, 45, 53.

Имеется только одна схема мартшрутизации: 1324536.

Ліміт часу 1 секунда
Ліміт використання пам'яті 128 MiB
Вхідні дані #1
2

8 0
SS....RR
00100000
00100000
00011000
00000100
00000100
00000011
00000000
00000000

13 0
SSS.RRRSS.RR.
0001000000000
0001000000000
0001000000000
0000111000000
0000000000000
0000000000000
0000000000000
0000000001000
0000000001000
0000000000110
0000000000000
0000000000000
0000000000000
Вихідні дані #1
4
12
Вхідні дані #2
2

5 1
SS.RR
00101
00100
10010
00000
00000

6 2
S....R
001000
000100
010001
000010
001000
000000
Вихідні дані #2
3
1
Вхідні дані #3
5

3 2
RS.
010
101
100

4 2
.R.S
0100
0010
1000
0100

4 2
.SR.
0000
0011
0100
0010

5 2
.SSRR
01000
10101
01010
00000
00000

6 2
SS..RR
001010
000010
000010
000010
100101
000000
Вихідні дані #3
2
1
2
6
24
Джерело 2021 USACO US Open, Платина