라벨이 붙은 경로
시간 제한15초메모리 제한1024 MB
간선 라벨이 문자열 A의 부분 문자열인 DAG에서, 시작 정점 s부터 각 정점까지 라벨이 사전순으로 가장 작은 경로를 구합니다.
문제
방향 비순환 그래프(DAG)가 주어진다. 정점은 개, 간선은 개이다. 각 간선에는 소문자로 이루어진 라벨이 붙어 있으며, 빈 문자열일 수도 있다. 경로의 라벨은 경로 순서대로 간선의 라벨을 이어 붙인 문자열이다. 시작 정점 에서 도착 정점 까지 가는 경로 중 라벨이 사전순으로 가장 작은 경로를 최소 경로라고 한다. 주어진 에 대해, 모든 정점 까지의 최소 경로를 구하라.
입력
첫 줄에 정수 , , , 가 공백으로 구분되어 주어진다. 는 아래에 나오는 문자열 의 길이이다. 정점은 1부터 까지 번호가 매겨져 있다.
둘째 줄에는 길이가 정확히 인 문자열 가 주어진다. 모든 문자는 영어 소문자이다. 간선의 라벨은 모두 의 부분 문자열이다.
이어지는 개의 줄 중 번째 줄에는 정수 , , , 가 주어진다. 번째 간선은 에서 로 향하며, 라벨은 의 번째 문자부터 시작하는 길이 인 부분 문자열이다. 의 문자는 1부터 까지 번호가 매겨져 있다.
출력
개의 줄을 출력한다. 번째 줄에는 에서 까지의 최소 경로를 출력한다. 에서 로 가는 경로가 없으면 정수 0만 출력한다. 그렇지 않으면 경로의 정점 개수(와 포함)를 먼저 쓰고, 경로 순서대로 정점 번호를 공백으로 구분해 출력한다. 해가 여러 개이면 그중 아무거나 출력해도 된다.
제한
- , , 모든 에 대해
- , , 모든 에 대해
- 그래프는 비순환이며 평행 간선이 없다. 즉, 이면 또는 이다.
힌트
이 예제에서 간선 의 라벨은 ab이고, 간선 의 라벨은 a이다. 3에서 4까지의 최소 경로는 이며, 그 라벨은 aba이다.