Задача №114744. Латинский квадрат

Крис любит решать разные головоломки. Недавно он узнал про судоку, идея которых основана на латинских квадратах. Таблица размера \(k \times k\) называется латинским квадратом , если количество различных элементов в таблице равно \(k\), и ни в одной строке и ни в одном столбце нет двух одинаковых элементов.

Например,

A B
B A
,
S P R
R S P
P R S
и
Q
являются латинскими квадратами, а
A B C
C C A
C A B
,
A B C
D C A
C A B
и
A B C
C A B
— нет.

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

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

В первой строке даны два целых числа \(n\) и \(m\) — размеры заготовки (\(1 \le n, m \le 2\,000\)).

В следующих \(n\) строках даны строки \(s_i\) — описание заготовки. Каждая строка \(s_i\) состоит из \(2 \cdot m\) символов с ASCII-кодами от \(33\) до \(126\). В клетке заготовки на пересечении \(i\)-й строки и \(j\)-го столбца находится пара символов \(s_{i, 2 \cdot j - 1}\) и \(s_{i, 2 \cdot j}\) (\(1 \le i \le n\), \(1 \le j \le m\)). Элементы в двух клетках заготовки равны, если упорядоченные пары символов в этих клетках равны. За подробным пояснением входных данных смотрите замечания.

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

Выведите одно целое число — количество способов вырезать из заготовки латинский квадрат.

Система оценки

Тесты к этой задаче состоят из пяти групп. Баллы за каждую группу ставятся только при прохождении всех тестов группы и всех тестов необходимых групп. Offline-проверка означает, что результаты тестирования вашего решения на данной группе станут доступны только после окончания соревнования.

Доп. ограничения
Группа Баллы \(n, m\) Необх. группы Комментарий}
0 0 Тесты из условия.
1 9 \(n, m \le 20\) 0
2 10 \(n, m \le 100\) 0, 1
3 25 \(n, m \le 500\) 0, 1, 2
4 26 В каждой строке и каждом столбце все элементы различны.
5 30 0, 1, 2, 3, 4 Offline-проверка.
Примеры
Входные данные
4 5
AABBAAAACC
BBAABBCCAA
AABBCCAABB
BBCCAABBCC
Выходные данные
26
Входные данные
5 10
!"#$%&'()*+,-./01234
56789:;<=>?@ABCDEFGH
IJKLMNOPQRSTUVWXYZ[\
]^_`abcdefghijklmnop
qrstuvwxyz{|}~!"#$%&
Выходные данные
50
Сдать: для сдачи задач необходимо войти в систему