만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

라임

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

요약
서로 다른 N개의 단어가 주어질 때, 이웃한 두 단어의 최장 공통 접미사 길이가 더 긴 단어 길이의 -1 이상인 조건을 만족하며 각 단어를 한 번만 쓰는 최장 수열의 길이를 구한다.
난이도

어려움10점 중 8점

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

문제

아드리안은 라임을 좋아한다. 아드리안은 두 단어의 가장 긴 공통 접미사 길이가 더 긴 단어의 길이와 같거나 그보다 딱 1만큼 짧을 때, 그리고 그때만 두 단어가 라임을 이룬다고 본다. 즉, 단어 AA와 BB가 라임을 이루는 조건은 다음과 같다.

LCS(A,B)≥max⁡(∣A∣,∣B∣)−1\mathrm{LCS}(A, B) \ge \max(|A|, |B|) - 1

여기서 LCS(A,B)\mathrm{LCS}(A, B)는 AA와 BB의 가장 긴 공통 접미사의 길이이고, ∣A∣|A|는 AA의 길이이다.

어느 날 단편집을 읽던 아드리안은 이웃한 두 단어가 항상 라임을 이루도록 단어를 최대한 길게 늘어놓아 보기로 했다. 늘어놓는 단어는 주어진 단어 중에서 고르고, 같은 단어를 두 번 쓸 수 없다.

아드리안은 이 일에 싫증이 나서 다시 책을 읽으러 갔다. 대신 단어 NN개가 주어질 때 이런 수열의 최대 길이를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 단어의 개수 NN이 주어진다. (1≤N≤500 0001 \le N \le 500\,000)

다음 NN개 줄에 단어가 한 개씩 주어진다. 단어는 영어 소문자로만 이루어져 있고, 모두 서로 다르다. 단어 길이의 합은 3 000 0003\,000\,000 이하이다.

출력

첫째 줄에 가장 긴 수열의 길이를 출력한다.

예제3

  1. 예제 1

    입력
    4
    honi
    toni
    oni
    ovi
    
    예상 출력
    3
    
  2. 예제 2

    입력
    5
    ask
    psk
    krafna
    sk
    k
    
    예상 출력
    4
    
  3. 예제 3

    입력
    5
    pas
    kompas
    stas
    s
    nemarime
    
    예상 출력
    1