Кластеризація важких ланцюгів#6267

Кластеризація важких ланцюгів

2 секунди
256 мегабайтів
Дуже складна

Група біологів працює над створенням ліків від вірусного захворювання. Вони протестували безліч антитіл різного походження, які можуть ефективно боротися з вірусними антигенами, і відібрали антитіл, що показали найкращі результати в експериментах.

Кожне антитіло визначається своїм важким ланцюгом — послідовністю амінокислот.

Набір антитіл утворює кластер схожості, якщо виконується хоча б одна з наступних умов:

Щоб полегшити подальші дослідження, біологи прагнуть згрупувати антитіла в кластери схожості.

Ваше завдання — розділити дані антитіла на мінімальну кількість кластерів схожості.

Вхідні дані

Перший рядок містить два цілі числа і — кількість важких ланцюгів і довжина послідовності амінокислот, які повинні збігатися (1 \le n \le 5000, 1 \le k \le 550).

Наступні рядків містять послідовності амінокислот, що формують важкі ланцюги антитіл. Кожна амінокислота позначається великою англійською літерою. Кожен важкий ланцюг містить принаймні і не більше амінокислот.

Вихідні дані

Перший рядок повинен містити одне ціле число — мінімальну кількість кластерів схожості.

Наступні рядки повинні містити описи кластерів, по одному на рядок.

Кожен опис починається з m_i — кількості антитіл у кластері, і продовжується m_i цілими числами — номерами цих антитіл. Антитіла нумеруються в порядку появи у вхідних даних, починаючи з одиниці.

Кожне антитіло повинно бути присутнім рівно в одному кластері.

Приклади

Приклад 1

Loading
Loading

Приклад 2

Loading
Loading