Boggle

각 격자에서 인접한 칸을 이어 철자를 만들고 칸을 중복 사용하지 않으며 q를 qu로 취급해 사전 단어를 모두 찾습니다.

보통5백트래킹트라이DFS면접 대비아직 제출이 없습니다시간 제한1초메모리 제한256 MB

문제

Boggle은 각 면에 알파벳이 하나씩 적힌 주사위 16개를 4x4 격자에 채워 놓고, 인접한 주사위의 글자를 이어서 단어를 찾는 놀이다. 이 문제에서는 같은 방식으로 글자 격자에서 사전에 있는 단어를 찾는 프로그램을 작성한다.

단어를 만들 때 각 글자는 격자에서 바로 앞 글자와 가로, 세로, 대각선 가운데 하나로 인접해야 한다. 한 단어 안에서 격자의 같은 칸은 한 번만 쓸 수 있다. 같은 글자라도 서로 다른 칸에서 왔다면 한 단어에 여러 번 나올 수 있다.

원래 Boggle에서는 주사위의 각 면에 글자가 하나씩 적혀 있지만 예외가 하나 있다. q만 적힌 면은 없고 대신 qu 두 글자가 함께 적혀 있다. 이 문제의 격자도 같은 규칙을 따르므로, 칸에 q가 있으면 그 칸은 qu 두 글자로 취급한다.

입력

첫째 줄에 사전에 들어 있는 단어의 개수 WW가 주어진다. (1W2001 \le W \le 200)

다음 WW개 줄에 각각 소문자 알파벳(a-z) 1자 이상 25자 이하로 이루어진 단어가 하나씩 주어진다. 사전의 단어는 모두 서로 다르다.

사전 다음에는 글자 격자가 하나 이상 주어진다. 각 격자는 격자의 크기 DD가 적힌 줄로 시작하고 (2D82 \le D \le 8), 격자는 D×DD \times D 정사각형이다. 이어지는 DD개 줄에는 각각 소문자 알파벳 DD개가 주어지며, 각 줄이 격자의 한 행이다. DD 자리에 0이 주어지면 입력이 끝난다.

출력

격자마다 다음을 출력한다.

  1. 그 격자에서 찾은 사전 단어를 사전순으로 한 줄에 하나씩 출력한다.
  2. 하이픈 하나만 있는 줄 -를 출력한다.