만드는 중입니다

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

무덤 혐오자

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

요약
주어진 단어들을 이어 붙인 문자열이 되도록, 격자에서 남쪽·서쪽·동쪽으로만 이동하며 타일을 다시 밟지 않고 북쪽 끝에서 남쪽 끝까지 가는 최단 경로를 찾는다.
난이도

어려움10점 중 8점

유형
동적 계획법, 그래프, 트라이, 최단 경로
정답자
아직 제출이 없습니다

문제

위대한 파라오 T'om Bha Ter의 잊혀진 무덤을 발견했다. 교활한 뱀 함정, 바위 함정, 개미 함정, 모래 함정, 속도 함정을 피해 오느라 함정에는 이제 진저리가 났다. 박물관에 있어야 할 값진 유물 더미와 나 사이에는 이제 한 가지 도전만 남았다. 북쪽에서 방에 들어서는데, 방의 바닥은 직사각형 격자이고 각 칸에는 글자가 새겨져 있다. 작은 명판에는 글자 단어 목록(정해진 순서의 개별 글자로 구성됨)과 다음과 같은 간단한 지침이 적혀 있다:

  1. 어떤 칸에서든 남쪽, 서쪽, 동쪽으로 한 칸씩만 이동할 수 있다.
  2. 같은 칸을 두 번 이상 밟을 수 없다.
  3. 이동 경로는 주어진 목록에 있는 완전한 글자 단어들의 나열을 철자로 만들어야 한다(글자 단어의 반복은 허용된다).
  4. 여러 경로가 존재하면, 가장 적은 수의 칸을 밟는 경로를 찾아야 한다.

이 규칙 중 하나라도 어기면 끝없는 나락으로 곤두박질치게 된다. 노트북을 가져왔으니 곧바로 코딩을 시작한다.

입력

입력은 세 양의 정수 mm nn kk (m,n,k≤50m,n,k \leq 50)가 있는 한 줄로 시작한다. mm과 nn은 직사각형 격자의 크기이고 kk는 글자 단어의 수이다. 다음 mm개 줄에는 공백 하나로 구분된 nn개의 대문자가 있으며, 직사각형 격자를 나타낸다. 다음 kk개 줄에는 각각 글자 단어가 있으며, 역시 모두 대문자로만 이루어져 있다. 각 글자 단어는 최대 5050개의 글자를 포함한다.

출력

가장 북쪽에 있는 임의의 칸에서 시작해 가장 남쪽에 있는 임의의 칸에서 끝나며 위의 모든 규칙을 따르는 경로가 있으면, 그러한 경로 중 가장 짧은 것의 길이를 출력한다. 그렇지 않으면 impossible을 출력한다.

예제3

  1. 예제 1

    입력
    3 4 1
    X X P X
    X X A T
    X X X H
    PATH
    
    예상 출력
    4
    
  2. 예제 2

    입력
    5 5 2
    X X P X X
    X X A T X
    X X H H X
    X M O X X
    X E X X X
    HOME
    PATH
    
    예상 출력
    8
    
  3. 예제 3

    입력
    5 5 2
    X X P X X
    X X A T X
    X X H X X
    X M O X X
    X E X X X
    HOME
    PATH
    
    예상 출력
    impossible