아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

항체 중쇄 군집화

시간 제한2초메모리 제한256 MB

요약
n개 항체 사슬을 앞 k글자나 뒤 k글자가 같은 묶음으로 나누어 묶음 수를 최소화합니다.
난이도

보통10점 중 7점

유형
그래프, 문자열
정답자
아직 제출이 없습니다

문제

생물학자들이 바이러스성 질병의 치료제를 찾고 있다. 여러 기원의 항체를 바이러스 항원에 시험해 본 뒤, 실험에서 가장 잘 작동한 항체 nn개를 골랐다.

항체는 저마다 중쇄로 구분한다. 중쇄는 아미노산을 늘어놓은 서열이고, 아미노산 하나는 영어 대문자 하나로 적는다.

항체의 집합이 다음 두 조건 중 적어도 하나를 만족하면 유사 군집이다.

  • 모든 중쇄의 kk-접두사(앞쪽 kk개의 아미노산)가 서로 같다.
  • 모든 중쇄의 kk-접미사(뒤쪽 kk개의 아미노산)가 서로 같다.

항체 하나로만 이루어진 집합은 언제나 유사 군집이다.

이후 연구를 간단히 하려고 생물학자들은 항체 nn개를 유사 군집으로 나누려 한다. 항체는 모두 정확히 한 군집에만 속해야 한다. 군집이 최소 몇 개 필요한지 구하라.

입력

첫째 줄에 중쇄의 개수 nn과 일치해야 하는 아미노산 서열의 길이 kk가 주어진다 (1≤n≤50001 \le n \le 5000, 1≤k≤5501 \le k \le 550).

다음 nn개 줄에는 항체의 중쇄가 한 줄에 하나씩 주어진다. 아미노산은 모두 영어 대문자이고, 중쇄의 길이는 kk 이상 550550 이하이다.

출력

항체 nn개를 나누는 데 필요한 유사 군집 개수의 최솟값을 정수 하나로 출력한다.

예제2

  1. 예제 1

    입력
    4 1
    AA
    AB
    BB
    BA
    
    예상 출력
    2
    
  2. 예제 2

    입력
    3 2
    ABA
    BAB
    XY
    
    예상 출력
    3