라임

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

어려움8문자열트라이그래프DFS아직 제출이 없습니다시간 제한1초메모리 제한256 MB

문제

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

LCS(A,B)max(A,B)1\mathrm{LCS}(A, B) \ge \max(|A|, |B|) - 1

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

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

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

입력

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

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

출력

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