단어 추측 게임
시간 제한2초메모리 제한256 MB
각 글자가 한 번만 나오는 단어들로 이루어진 말뭉치마다, A가 답과 모순되지 않게 단어를 몰래 바꿔 가며 행맨식 게임에서 항상 이길 수 있는지 판정한다.
문제
두 사람이 하는 "단어 추측 게임(GMW, Guess My Word)"을 소개한다. 두 참가자를 A와 B라고 하자.
- A는 두 사람이 함께 알고 있는 말뭉치(단어 목록)에서 단어 하나를 마음속으로 고른다. 고른 단어의 길이가 이라면, A는 종이에 수평 선분 개를 한 줄로 그려 각 글자가 들어갈 자리를 표시하고, 종이를 두 사람 사이에 둔다.
- 이제 B는 글자를 하나씩 추측하여 단어를 맞혀야 한다. 각 단계에서 B는 글자 하나를 골라 A에게 말한다.
- 그 글자가 단어에 들어 있으면, A는 그 글자를 알맞은 자리(선분 위)에 적는다. 이렇게 하여 단어의 모든 글자가 채워지면 B가 이긴다.
- 그 글자가 단어에 들어 있지 않으면, A는 아직 비어 있는 가장 왼쪽 선분의 아래에 그 글자를 적는다. 선분 아래에는 이런 자리가 모두 개 있다. 만약 개의 자리가 이미 모두 차 있어서 방금 말한 틀린 글자를 적을 곳이 어디에도 없다면, 그 순간 B가 지고 A가 이긴다. 이때 A는 자신이 고른 단어를 B에게 밝혀야 한다.
정리하면, B는 틀린 글자를 최대 개까지 적을 수 있으며, 이미 개를 적은 뒤에 또 틀린 글자를 말하는 순간(즉 번째 틀린 추측을 하는 순간) B가 진다. 반대로 틀린 글자를 개까지 말했더라도 남은 자리를 올바른 글자로 모두 채워 단어를 완성하면 B가 이길 수 있다.
그런데 A는 단어를 어디에도 적어 두지 않고 머릿속으로만 생각하기 때문에, 게임 도중에 지금까지 자신이 한 대답과 모순되지 않는 다른 단어로 몰래 바꿀 수 있다. 다시 말해 A는 특정 단어 하나에 얽매이지 않고, 지금까지의 대답과 일관된 말뭉치 속 단어라면 무엇이든 정답인 것처럼 대답을 이어 갈 수 있다. 다만 게임이 끝날 때 A가 이겼다면, A는 지금까지 한 모든 대답과 일치하면서 말뭉치에 실제로 존재하는 단어 하나를 정답으로 제시할 수 있어야 한다.
이렇게 A가 단어를 바꿀 수 있기 때문에, 말뭉치가 잘 짜여 있으면 B가 어떻게 추측하더라도 A가 항상 이길 수 있는 경우가 생긴다. 예를 들어 두 글자짜리 단어 ME, MD, DE, ED, AS, IS, AI, SI로만 이루어진 말뭉치라면, B가 어떤 글자를 어떤 순서로 고르더라도 A는 언제나 이길 수 있다.
여러 개의 말뭉치가 주어진다. 각 말뭉치에 대해, B가 어떤 글자를 어떤 순서로 고르더라도 A가 반드시 이길 수 있는지를 서로 독립적으로 판단하여라.
입력
입력은 서로 독립적으로 처리하는 여러 개의 말뭉치로 이루어진다.
첫 번째 줄에 말뭉치의 개수 가 주어진다. 는 이상 이하의 정수이다. 그다음 개의 말뭉치가 차례로 주어진다.
각 말뭉치는 먼저 단어의 개수 가 한 줄에 주어지고, 이어서 개의 서로 다른 단어가 주어진다. 단어들은 공백, 탭, 줄 바꿈 중 하나 이상으로 구분된다. 모든 단어는 영어 대문자로만 이루어지며, 각 단어의 길이는 항상 보다 작다(즉 이상 이하). 또한 한 단어 안에서는 같은 글자가 두 번 이상 나타나지 않는다. 즉 한 단어를 이루는 글자들은 모두 서로 다르다.
입력 파일의 크기는 500KB보다 작다. 어떤 말뭉치이든 단어의 개수는 1,000개를 넘지 않는다.
출력
각 말뭉치마다, B가 어떤 글자들을 어떤 순서로 고르더라도 A가 항상 이길 수 있는 전략이 존재하면 "Yes"를, 그렇지 않으면 "No"를 한 줄에 출력한다.
A가 이기는 게임이라면, 마지막에 A가 정답으로 제시하는 단어는 반드시 말뭉치에 실제로 존재하는 단어여야 하며, 게임 동안 A가 한 모든 대답과 일치해야 한다.