마스터마인드: 최적의 다음 추측

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

요약
지금까지의 마스터마인드 추측과 검은색·흰색 페그 결과가 주어질 때, 가능한 각 응답에 대해 남는 일관된 코드 수의 최댓값을 가장 작게 만드는 다음 추측을 찾는다.
난이도

보통10점 중 7점

유형
완전 탐색, 시뮬레이션, 구현, 해시맵
정답자
아직 제출이 없습니다

문제

마스터마인드는 두 명이 하는 게임이다. 첫 번째 사람인 출제자는 길이가 ll인 코드를 비밀리에 정하는데, 각 글자는 대문자 A, B, C, ...(알파벳의 앞 cc개 글자)로 나타내는 cc가지 색 중 하나이다. 두 번째 사람인 추측자는 추측을 반복하여 이 코드를 알아내려 하며, 각 추측 역시 그런 글자 ll개로 이루어진 문자열이다.

추측을 할 때마다 출제자는 검은 못과 흰 못을 이용해 두 개의 수를 알려 준다. 검은 못의 수는 색과 위치가 모두 맞은 자리의 개수이고, 흰 못의 수는 색은 코드 안에 있지만 위치가 다른, 남은 맞은 색의 개수이다. 예를 들어 비밀 코드가 ABCC이고 추측이 ACCD이면 응답은 검은 못 2개와 흰 못 1개이며, 추측이 CCAA이면 응답은 흰 못 3개이다. 추측자는 응답이 검은 못 ll개가 될 때까지 계속 추측하는데, 이는 코드를 찾았다는 뜻이다.

이미 nn번의 추측이 이루어지고 그 응답을 받았다고 하자. 어떤 코드가 이 nn개의 응답 모두와 모순되지 않으면 그 코드는 여전히 가능한 코드이다. 다음에 할 후보 추측 하나를 생각하자. 이 후보는 여전히 가능한 코드만이 아니라 cc가지 색으로 이루어진 길이 ll의 아무 코드나 될 수 있다. 이 후보가 만들어 낼 수 있는 모든 응답을 생각하고, 각 응답마다 그 응답을 내놓을 가능한 코드가 몇 개인지 센다. 응답이 검은 못 ll개라면 코드가 완전히 확정되므로 그 응답이 남기는 코드는 0개이다. 이 개수들 중 모든 응답에 대한 최댓값을 그 후보 추측의 불확실도라고 한다. 가장 좋은 다음 추측은 불확실도가 가장 작은 추측이다.

예를 들어 가능한 코드가 ABBB, ABBC, ABCB 세 개만 남았다고 하자. ABBB를 추측하면 응답은 두 가지이다: 검은 못 4개(코드를 찾음, 0개 남음) 또는 검은 못 3개(코드 2개가 남음, ABBC와 ABCB). 따라서 불확실도는 2이다. 대신 ABBC를 추측하면 응답은 세 가지이다: 검은 못 4개(0개 남음), 검은 못 3개(1개 남음, ABBB), 검은 못 2개와 흰 못 2개(1개 남음, ABCB). 따라서 불확실도는 1이다. 그러므로 이 경우에는 ABBC가 더 좋은 추측이다.

지금까지의 추측과 응답이 주어질 때, 가장 좋은 다음 추측을 구하는 프로그램을 작성하여라.

입력

첫 줄에는 테스트 케이스의 수 TT가 하나의 정수로 주어진다. 각 테스트 케이스는 여러 줄로 이루어진다. 첫 줄에는 세 정수 ll, cc, nn이 주어지며, 각각 코드의 길이, 색의 수, 이미 이루어진 추측의 수를 나타낸다. 1≤l≤151 \le l \le 15, 1≤c≤201 \le c \le 20, 0≤n≤100 \le n \le 10이다. ll과 cc는 항상 가능한 코드의 총 개수 clc^l이 3276832768 이하가 되도록 주어진다. 이어지는 nn개의 줄은 각각 다음 형식이다.

guess b w

여기서 guessguess는 길이 ll의 문자열이고, bb와 ww는 그 응답의 검은 못과 흰 못의 개수이다. 모든 색은 알파벳의 앞 cc개 글자에서 뽑은 대문자이다. 각 테스트 케이스에서 주어진 추측들은 여전히 가능한 코드를 15001500개 이하로 남긴다.

출력

각 테스트 케이스마다, 가장 좋은 다음 추측과 그 불확실도를 하나의 공백으로 구분하여 한 줄에 출력한다. 불확실도가 가장 작은 추측이 여러 개이면, 사전순(알파벳순)으로 가장 앞선 것을 출력한다.

예제1

  1. 예제 1

    입력
    3
    4 6 2
    AABC 1 2
    BEAC 0 3
    4 6 1
    ABCD 0 0
    3 20 4
    ABE 1 0
    ROM 1 0
    INK 1 0
    MOB 0 2
    
    예상 출력
    ABCD 4
    AEEE 3
    IBM 0