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

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

단어 그룹화

시간 제한1초메모리 제한1024 MB

요약
최대 15종류의 알파벳으로 이루어진 N개의 단어를, 각 묶음마다 모든 단어가 공통으로 가진 문자가 하나 이상 있도록 최소 개수의 묶음으로 나눈다.
난이도

보통10점 중 6점

유형
비트 연산, 동적 계획법, 그리디
정답자
아직 제출이 없습니다

문제

아담(Adomas)은 다차원 십자말풀이를 만들기로 했고, 이를 위해 단어들을 여러 그룹으로 나누어야 합니다.

그는 NN개의 단어를 골라 두었습니다. 단어에는 라틴 알파벳의 처음 RR개 글자만 나타납니다. 한 단어 안에서 같은 글자가 여러 번 나올 수 있고, 단어들의 길이는 서로 다를 수 있습니다.

아담은 모든 단어를 가능한 한 적은 수의 그룹으로 나누려고 합니다. 단, 각 그룹에는 그 그룹에 속한 모든 단어가 공통으로 가지고 있는 글자가 적어도 하나는 있어야 합니다.

단어들을 최소 몇 개의 그룹으로 나눌 수 있는지 구하세요.

입력

첫째 줄에 단어의 개수 NN과 단어에 사용되는 서로 다른 글자의 개수 RR이 주어집니다. 이어지는 NN개의 줄에는 각각 하나의 단어가 주어집니다. 각 단어는 길이가 50 이하인 대문자 라틴 알파벳 문자열이며, 라틴 알파벳의 처음 RR개 글자만 사용합니다.

출력

단어들을 나눌 수 있는 그룹의 최소 개수를 출력하세요.

제한

  • 1≤N≤20001 \le N \le 2000
  • 2≤R≤152 \le R \le 15

예제2

  1. 예제 1

    입력
    3 4
    ABC
    BCD
    CDA
    
    예상 출력
    1
    
  2. 예제 2

    입력
    3 3
    ABA
    BC
    CA
    
    예상 출력
    2