만드는 중입니다

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

애매함

시간 제한1초메모리 제한128 MB

요약
공백이 없고 내부 글자가 뒤섞인 문자열을 사전 단어들과 첫글자, 끝글자, 글자 집합이 일치하도록 유일하게 분해하고, 여러 방법이 있거나 불가능한 경우를 구분해서 출력합니다.
난이도

보통10점 중 7점

유형
동적 계획법, 문자열, 해시맵, 백트래킹
정답자
아직 제출이 없습니다

문제

단어에서 첫 글자와 마지막 글자를 제외한 나머지 글자들의 순서를 섞어도, 사람은 그 단어를 어렵지 않게 읽을 수 있다. 예를 들어 문장 "tihs snetncee mkaes prfecet sesne"는 대부분의 사람이 어렵지 않게 읽는다.

또한 문장에서 단어 사이의 공백을 모두 없애도 문장을 읽는 데 큰 어려움이 없다. 예를 들어 "thissentencemakesperfectsense"가 그렇다.

하지만 글자 순서를 섞는 것과 공백을 없애는 것을 함께 적용하면 문장을 읽기가 어려워진다. "tihssnetnceemkaesprfecetsesne" 같은 문장이 그 예이다.

각 단어의 첫 글자와 마지막 글자는 그대로 두고 가운데 글자들만 임의로 섞은 뒤, 단어 사이의 공백을 모두 제거한 문장이 주어진다. 여기에 사용할 수 있는 올바른 단어의 목록도 함께 주어진다. 이 정보를 이용하여 원래 문장을 복원하는 프로그램을 작성하시오.

어떤 조각(원래의 한 단어)이 올바른 단어와 일치한다는 것은, 길이가 같고 첫 글자와 마지막 글자가 같으며 사용된 글자의 구성(글자별 개수)이 같다는 뜻이다.

입력

첫째 줄에 테스트 케이스의 수 TT가 주어진다. (1≤T≤1001 \le T \le 100)

각 테스트 케이스는 두 부분으로 이루어진다.

  • 첫째 줄: 글자 순서를 섞고 공백을 없앤 문장. 알파벳 소문자로만 이루어지며 길이는 최대 10001000이다.
  • 둘째 줄: 올바른 단어의 수 nn. (1≤n≤10 0001 \le n \le 10\,000)
  • 이어지는 nn개의 줄: 올바른 단어. 모두 서로 다르고 알파벳 소문자로만 이루어지며 길이는 최대 100100이다.

출력

각 테스트 케이스마다 한 줄에 결과를 출력한다.

  • 원래 문장을 유일하게 복원할 수 있으면 그 문장을 단어 사이마다 한 칸 공백으로 구분하여 출력한다.
  • 복원 방법이 두 가지 이상이면 ambiguous를 출력한다.
  • 복원이 불가능하면 impossible을 출력한다.

예제1

  1. 예제 1

    입력
    3
    tihssnetnceemkaesprfecetsesne
    5
    makes
    perfect
    sense
    sentence
    this
    hitehre
    2
    there
    hello
    hitehre
    3
    hi
    there
    three
    
    예상 출력
    this sentence makes perfect sense
    impossible
    ambiguous