UNIST는 무엇의 약자일까?

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

요약
N개 단어 각각에서 앞부분 일부를 잘라 이어 붙여 UNIST를 만드는 경우의 수를 1,000,000,007로 나눈 나머지로 구한다.
난이도

보통10점 중 5점

유형
동적 계획법, 문자열, 해시맵, 재귀
정답자
아직 제출이 없습니다

문제

UNIST는 Ulsan National Institute of Science and Technology의 약자이다. 어느 날 원이는 약자가 UNIST가 되는 다른 단어가 있는지 궁금해졌다.

단어 aa의 길이를 len⁡(a)\operatorname{len}(a)로 표기하자. NN개의 단어 W1,W2,…,WNW_1, W_2, \dots, W_N이 주어질 때, 단어 WiW_i (1≤i≤N)(1 \le i \le N)에서 앞에서 0글자 이상 len⁡(Wi)\operatorname{len}(W_i)글자 이하를 택해 만든 문자열을 PiP_i라 하자. 다시 말해, PiP_i는 WiW_i의 길이 len⁡(Pi)\operatorname{len}(P_i)인 접두사이다.

PiP_i (1≤i≤N)(1 \le i \le N)들을 적당히 정하여 P1+P2+⋯+PNP_1+P_2+\dots+P_N이 UNIST가 되도록 하는 경우의 수를 구해보자. 단, 연산 ++는 문자열 연결(string concatenation) 연산이다.

입력

첫 줄에 단어의 수 NN이 주어진다.

이후 NN개의 줄에 한 줄에 하나씩 NN개의 단어 W1,W2,…,WNW_1, W_2, \dots, W_N가 주어진다.

WiW_i (1≤i≤N)(1 \le i \le N)는 1개 이상의 영문 대문자로만 이루어진 문자열이다.

출력

P1+P2+⋯+PNP_1+P_2+\dots+P_N이 UNIST가 되도록 P1,P2,…,PNP_1, P_2, \dots, P_N을 결정하는 경우의 수를 1,000,000,007로 나눈 나머지를 출력한다.

제한

  • 1≤N≤100,0001 \le N \le 100,000
  • len⁡(Wi)≤25\operatorname{len}(W_i) \le 25

예제3

  1. 예제 1

    입력
    7
    ULSAN
    NATIONAL
    INSTITUTE
    OF
    SCIENCE
    AND
    TECHNOLOGY
    
    예상 출력
    1
    
  2. 예제 2

    입력
    5
    UNICODE
    IS
    THE
    SPORTS
    TIME
    
    예상 출력
    4
    
  3. 예제 3

    입력
    2
    UNIS
    UT
    
    예상 출력
    0