애매함
시간 제한1초메모리 제한128 MB
공백이 없고 내부 글자가 뒤섞인 문자열을 사전 단어들과 첫글자, 끝글자, 글자 집합이 일치하도록 유일하게 분해하고, 여러 방법이 있거나 불가능한 경우를 구분해서 출력합니다.
문제
단어에서 첫 글자와 마지막 글자를 제외한 나머지 글자들의 순서를 섞어도, 사람은 그 단어를 어렵지 않게 읽을 수 있다. 예를 들어 문장 "tihs snetncee mkaes prfecet sesne"는 대부분의 사람이 어렵지 않게 읽는다.
또한 문장에서 단어 사이의 공백을 모두 없애도 문장을 읽는 데 큰 어려움이 없다. 예를 들어 "thissentencemakesperfectsense"가 그렇다.
하지만 글자 순서를 섞는 것과 공백을 없애는 것을 함께 적용하면 문장을 읽기가 어려워진다. "tihssnetnceemkaesprfecetsesne" 같은 문장이 그 예이다.
각 단어의 첫 글자와 마지막 글자는 그대로 두고 가운데 글자들만 임의로 섞은 뒤, 단어 사이의 공백을 모두 제거한 문장이 주어진다. 여기에 사용할 수 있는 올바른 단어의 목록도 함께 주어진다. 이 정보를 이용하여 원래 문장을 복원하는 프로그램을 작성하시오.
어떤 조각(원래의 한 단어)이 올바른 단어와 일치한다는 것은, 길이가 같고 첫 글자와 마지막 글자가 같으며 사용된 글자의 구성(글자별 개수)이 같다는 뜻이다.
입력
첫째 줄에 테스트 케이스의 수 가 주어진다. ()
각 테스트 케이스는 두 부분으로 이루어진다.
- 첫째 줄: 글자 순서를 섞고 공백을 없앤 문장. 알파벳 소문자로만 이루어지며 길이는 최대 이다.
- 둘째 줄: 올바른 단어의 수 . ()
- 이어지는 개의 줄: 올바른 단어. 모두 서로 다르고 알파벳 소문자로만 이루어지며 길이는 최대 이다.
출력
각 테스트 케이스마다 한 줄에 결과를 출력한다.
- 원래 문장을 유일하게 복원할 수 있으면 그 문장을 단어 사이마다 한 칸 공백으로 구분하여 출력한다.
- 복원 방법이 두 가지 이상이면
ambiguous를 출력한다. - 복원이 불가능하면
impossible을 출력한다.