비슷한 단어

시간 제한4초메모리 제한512 MB

요약
서로 다른 단어들의 집합이 주어질 때, 한쪽에서 맨 앞 글자를 지워 다른 쪽을 얻을 수 있는 두 단어가 함께 들어가지 않도록 최대한 많은 접두사를 고른다.
난이도

어려움10점 중 8점

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

문제

영소문자로 이루어진 비어 있지 않은 문자열을 단어라고 하자. 단어 xx의 접두사란 xx에서 마지막 글자를 0개 이상 제거해 얻을 수 있는 단어 yy를 말한다.

두 단어가 비슷하다는 것은, 한 단어에서 첫 글자를 제거하면 다른 단어를 얻을 수 있다는 뜻이다.

단어 집합 SS가 주어진다. 다음 조건을 만족하는 비어 있지 않은 단어 집합 XX의 최대 크기를 구하라.

  • XX의 모든 단어는 SS에 속한 어떤 단어의 접두사이다.
  • XX에 비슷한 단어 쌍이 없다.

입력

입력에는 여러 개의 테스트 케이스가 들어 있다. 입력의 첫째 줄에는 테스트 케이스의 개수 tt가 주어진다. 이어서 각 테스트 케이스가 주어진다.

각 테스트 케이스의 첫째 줄에는 집합 SS에 속한 단어의 개수 nn이 주어진다 (1≤n≤1061 \le n \le 10^6). 이어지는 nn개의 줄에는 SS의 원소인 비어 있지 않은 단어가 한 줄에 하나씩 주어진다. SS의 모든 단어는 서로 다르다.

한 입력에서 모든 단어의 길이의 합은 10610^6을 넘지 않는다.

출력

각 테스트 케이스마다 XX가 가질 수 있는 단어 개수의 최댓값 mm을 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    2
    3
    aba
    baba
    aaab
    2
    aa
    a
    
    예상 출력
    6
    1