만드는 중입니다

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

동물원

면접 대비

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

요약
N개의 우리를 K종의 동물로 채우되 이웃한 우리에 같은 종이나 같은 싸움 그룹에 속한 종이 오지 않도록 하는 배치의 수를 센다.
난이도

보통10점 중 4점

유형
동적 계획법, 비트 연산, 조합론, 완전 탐색
정답자
아직 제출이 없습니다

문제

Esmeralda는 NN개의 우리가 일렬로 놓인 동물원을 만들려고 한다. 각 우리에는 동물 한 마리를 넣어야 한다. 그녀에게는 A, B, C 등으로 부르는 KK종의 동물이 있다. 같은 동물 종을 여러 우리에 넣을 수 있지만, 바로 옆 우리에는 같은 종을 넣을 수 없다. 또한 그녀는 어떤 동물들이 서로 잘 어울리지 않는다는 것을 알고 있다. 구체적으로 MM개의 "싸움 그룹"이 있으며, Esmeralda는 같은 싸움 그룹에 속한 두 동물을 인접한 우리에 넣고 싶어 하지 않는다. Esmeralda가 우리에 동물을 배치하는 방법의 수는 몇 가지인가?

입력

첫 번째 줄에는 세 정수 2≤N≤152\le N \le 15, 우리의 수, 2≤K≤102\le K \le 10, 동물 종의 수, 2≤M≤52 \le M\le 5, 싸움 그룹의 수가 주어진다. 다음 MM개의 줄에는 각각 22자 이상 KK자 이하의 문자열이 주어진다. 이는 서로를 용납하지 않는 동물 종들의 싸움 그룹이다. 문자열에는 알파벳의 처음 KK개 문자만 나타날 수 있고 대문자만 사용되며, 같은 문자열 안에서 같은 문자가 두 번 나타나지 않는다.

출력

Esmeralda가 동물을 배치할 수 있는 방법의 수를 정수로 출력한다. 주어진 입력에 대해 답은 20억을 넘지 않는다.

힌트

첫 번째 예제에서는 모든 종이 서로 잘 어울린다. 첫 번째 우리에는 4종 중 하나를 넣을 수 있다. 두 번째와 세 번째 우리에는 각각 세 가지 가능성이 있는데, 바로 앞 우리와 같은 종을 넣을 수 없기 때문이다. 따라서 4⋅3⋅3=364\cdot 3\cdot 3=36가지 배치가 가능하다.

두 번째 예제에서는 비비와 코끼리가 인접할 수 없다는 것을 알고 있다. 또한 비비, 영양, 딩고, 시트론나비는 모두 적이며, 따라서 이들 중 어느 것도 서로 인접할 수 없다. Esmeralda는 코끼리를 한 칸씩 건너 배치하고 나머지 우리에는 영양, 딩고, 시트론나비 중에서 자유롭게 선택해야 한다. 코끼리로 시작하면 9가지, 다른 동물로 시작하면 9가지가 가능하다.

예제3

  1. 예제 1

    입력
    3 4 0
    
    예상 출력
    36
    
  2. 예제 2

    입력
    4 5 2
    BE
    BADC
    
    예상 출력
    18
    
  3. 예제 3

    입력
    9 8 3
    AC
    CGD
    BEFD
    
    예상 출력
    2235978