Олимпиадный тренинг

Задача . B. Гиперсет


Пчёлки Алиса и Алеся подарили пчеловодке Полине на Новый Год знаменитую карточную игру «Set». Колода для игры состоит из карт, каждая из которых обладает набором из четырех признаков: тип фигуры, количество фигур, их цвет и текстура. Сетом называется тройка карт, у которых каждый признак либо у всех попарно отличается, либо совпадает. Рисунок ниже иллюстрирует возможные комбинации карт.

Полина придумала новый вариант игры и назвала его «Hyperset». В этой игре есть \(n\) карт, обладающих \(k\) признаками, каждый из которых принимает значение «S», «E» или «T». Оригинальная игра «Set» может быть рассмотрена как «Hyperset» с \(k = 4\).

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

К сожалению, зимние каникулы подошли к концу, и Полине уже надо идти в школу. Помогите Полине найти количество сетов среди карт, лежащих на столе.

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

Первая строка входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 1500\), \(1 \le k \le 30\)) — количество карт и количество признаков соответственно.

В каждой из следующих \(n\) строк содержится описание карт. Описание карты представляет собой строку, состоящую из \(k\) букв «S», «E», «T». Символ на позиции \(i\) описывает \(i\)-й признак этой карты. Все карты различны.

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

Выведите единственное число — количество способов выбрать три карты, образующих сет.

Примечание

В третьем примере сетами являются следующие тройки карт:

  1. «SETT», «TEST», «EEET»
  2. «TEST», «ESTE», «STES»

Примеры
Входные данныеВыходные данные
1 3 3
SET
ETS
TSE
1
2 3 4
SETE
ETSE
TSES
0
3 5 4
SETT
TEST
EEET
ESTE
STES
2

time 3000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя