스택 트럭 운전사

시간 제한3초메모리 제한128 MB

요약
글자를 스택에 넣거나 꺼내는 간선들로 이루어진 그래프에서, 스택 규칙을 지키며 K km 이내로 도시 1에서 N까지 가는 경로 수를 세는 문제입니다.
난이도

어려움10점 중 8점

유형
동적 계획법, 스택, 그래프
정답자
아직 제출이 없습니다

문제

한 운전사는 도시들을 이동하며 트럭에 짐을 싣거나 내린다. 트럭의 용량은 제한이 없지만, 자동 적재 장치는 스택처럼 동작한다. 따라서 가장 나중에 실은 짐만 먼저 내릴 수 있다.

짐은 알파벳 26종류로 나타낸다. 같은 알파벳은 대소문자와 관계없이 같은 종류다.

모든 도로는 일방통행이며 길이는 1km이다. 도로를 지날 때 수행되는 동작은 세 가지 중 하나다.

  • 대문자 C가 붙은 도로: C 종류의 짐 하나를 싣는다.
  • 소문자 c가 붙은 도로: 스택 맨 위의 짐이 c와 같은 종류일 때만 그 짐 하나를 내릴 수 있다.
  • 알파벳이 없는 도로: 짐을 싣거나 내리지 않고 지나간다.

도시는 N개, 도로는 E개가 있다. 운전사는 1번 도시에서 출발해 N번 도시에 도착하려고 한다. 도착했을 때 트럭에 짐이 남아 있어도 된다.

최대 Kkm만 이동할 수 있을 때, 1번 도시에서 N번 도시로 도착하는 방법의 수를 구하시오.

입력

첫째 줄에 도시의 수 N, 도로의 수 E, 이동할 수 있는 최대 거리 K가 주어진다. (2 <= N <= 50, 1 <= E <= 2450, 1 <= K <= 50)

다음 E개 줄에는 도로의 정보가 주어진다. 도로의 동작에 따라 형식이 다르다.

  • x y C: x에서 y로 가는 도로이다. 이 도로를 지날 때 대문자 C에 해당하는 짐을 싣는다.
  • x y c: x에서 y로 가는 도로이다. 이 도로를 지날 때 소문자 c에 해당하는 짐을 내려야 한다.
  • x y: x에서 y로 가는 도로이며, 짐을 싣거나 내리지 않는다.

같은 방향으로 같은 두 도시를 잇는 도로는 두 개 이상 주어지지 않는다. 반대 방향의 도로는 따로 주어질 수 있으며, x와 y가 같은 경우는 없다.

출력

1번 도시에서 출발해 N번 도시로 도착하는 방법의 수를 출력한다. 수가 매우 커질 수 있으므로 10007로 나눈 나머지를 출력한다.

예제2

  1. 예제 1

    입력
    2 1 10
    1 2 a
    
    예상 출력
    0
    
  2. 예제 2

    입력
    7 9 5
    1 2 A
    2 3 B
    2 5
    5 3 C
    3 4 b
    3 6 c
    3 7
    4 7 a
    6 7 a
    
    예상 출력
    4