만드는 중입니다

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

스카의 공격 준비

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

요약
각 hyena의 현재 유전자열에서 부분수열을 하나씩 골라, 앞 개체의 원래 유전자열이 다음 개체보다 강한 경우의 수를 10^9+7로 나눈 나머지로 구합니다.
난이도

어려움10점 중 8점

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

문제

스카가 공격을 위해 하이에나 군대를 준비하고 있다. 선발에 하이에나 nn마리가 모였다. 스카는 그중에서도 타고난 재능을 가진, 가장 능력 있는 하이에나를 뽑고 싶어 한다.

각 하이에나에게는 유전자형이 있다. 유전자형은 유전자가 나열된 것이며, 유전자는 영문 소문자로 표기한다.

각 하이에나가 태어날 때의 유전자형은 현재 유전자형의 비어 있지 않은 부분 수열이었다. 그 뒤 살아가는 동안 유전자형의 여러 위치에 임의의 유전자가 임의의 개수만큼 끼어들어, 지금의 모습이 되었다.

유전자형 aa가 bb보다 강하다는 것은, 모든 j<ij < i에 대해 aj=bja_j = b_j이고 aia_i가 bib_i보다 알파벳 순서상 앞선다는 인덱스 ii가 존재한다는 뜻이다. 모든 ii에 대해 ai=bia_i = b_i이면 유전자 수가 더 적은 쪽이 강하다.

스카는 태어날 때 유전자형이 어떠했을지 궁금해졌다. 알려진 사실은 ii번째 하이에나의 태어날 때 유전자형이 (i+1)(i+1)번째 하이에나의 것보다 강했다는 것이다. 이 조건을 모두 만족하는 태어날 때 유전자형 집합의 개수를 구하라. 답은 1 000 000 0071\,000\,000\,007로 나눈 나머지로 출력한다.

입력

첫 줄에 하이에나의 수 nn (1≤n≤101 \le n \le 10)이 주어진다. 이후 nn개의 줄에 각 하이에나의 현재 유전자형 sis_i가 한 줄에 하나씩 주어진다. 각 문자열의 길이는 13을 넘지 않는다.

출력

조건을 모두 만족하는 태어날 때 유전자형 집합의 개수를 1 000 000 0071\,000\,000\,007로 나눈 나머지를 출력한다.

예제3

  1. 예제 1

    입력
    2
    aaa
    aa
    
    예상 출력
    1
    
  2. 예제 2

    입력
    2
    ab 
    abc
    
    예상 출력
    13
    
  3. 예제 3

    입력
    3
    qwerty
    qwerty
    ytrewq
    
    예상 출력
    87506