숨은 단어
면접 대비시간 제한2초메모리 제한512 MB
최대 10x10 크기의 글자 격자와 길이 10 이하의 질의 단어 100,000개가 주어질 때, 인접한 칸을 중복 없이 지나 만들어지는 단어의 개수를 센다.
문제
Ingrid는 토요일 신문에 실린 격자 숨은 단어 퍼즐을 풀고 있는데, 손으로 하려니 조금 지루하다. 다행히 Ingrid는 프로그래밍을 할 줄 알아서, 퍼즐 사진을 깔끔한 텍스트 형식으로 바꿔 주는 이미지 인식 루틴을 잘 만들어 두었다. 하지만 퍼즐을 실제로 푸는 프로그램을 작성하는 일에서 막혀 있다. 도와줄 수 있겠는가?
단어가 h x w 격자에 포함된다는 것은, 격자의 어떤 칸에서 시작해 그곳에서 이웃한 아직 방문하지 않은 칸으로 걸어가며 단어를 만들 수 있다는 뜻이다. 두 칸이 이웃한다는 것은 대각선 이동을 제외하고 인접해 있다는 뜻이다. 이런 격자와 단어 목록이 주어질 때, 목록에 있는 단어 중 격자에 포함된 단어의 개수를 구하라.
입력
첫째 줄에는 격자의 높이와 너비를 나타내는 두 정수 h와 w가 주어진다 (1 ≤ h, w ≤ 10). 그다음 h개의 줄이 이어지며, 각 줄에는 격자의 한 행을 나타내는 길이 w의 문자열이 주어지는데, 이 문자열은 대문자로만 이루어져 있다. 그다음 줄에는 Ingrid가 찾는 단어의 개수를 나타내는 정수 n이 하나 주어진다 (1 ≤ n ≤ 100 000). 마지막으로 n개의 단어가 각각 한 줄에 하나씩 주어진다. 이 단어들은 길이가 10자를 넘지 않는다.
출력
출력은 하나의 수로, 격자 아래에 있는 단어 중 격자에 포함된 단어의 개수이다.