아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

내가 생각한 숫자는 무엇일까?

시간 제한2초메모리 제한512 MB

요약
서로 다른 숫자로 이루어진 L자리 비밀 수에 대한 hit/blow 힌트가 주어질 때, 조건에 맞는 유일한 수를 찾거나 NO를 출력한다.
난이도

보통10점 중 4점

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

문제

내 머릿속에 L자리 숫자가 하나 있다 (4 <= L <= 10). 이 숫자가 무엇인지 맞혀야 한다. 숫자는 다음 열 가지 문자로 이루어진다.

"0","1","2","3","4","5","6","7","8", "9".

같은 숫자가 두 번 나오지 않는다. 예를 들어 L = 4일 때 "1234"는 가능한 후보지만 "1123"은 "1"이 두 번 나오므로 불가능하다.

숫자는 "0"으로 시작할 수 있으며, "05678"은 "5678"과 다른 숫자로 취급한다.

너와 네 컴퓨터가 텔레파시로 내 머릿속을 읽을 수 없다면, 내가 생각한 숫자를 알아내기 위해 힌트가 필요하다. 힌트는 try, hit, blow라는 세 숫자로 이루어진다.

try는 L자리 십진수다. try에도 같은 숫자가 두 번 나오지 않으며, 이 숫자도 "0"으로 시작할 수 있다.

hit은 try와 내가 생각한 숫자에 공통으로 들어 있으면서 위치까지 정확히 같은 숫자의 개수다.

blow는 try와 내가 생각한 숫자에 공통으로 들어 있지만 위치는 같지 않은 숫자의 개수다.

힌트는 다음과 같이 한 줄에 나열한다.

try hit blow

예를 들어 L = 4이고 내가 생각한 숫자가 9876이라면, 다음은 올바른 힌트들로 이루어진 힌트 집합의 예다.

7360 0 2
2507 0 1
9713 1 1
9678 2 2

위 힌트 집합이면 숫자를 충분히 알아낼 수 있고 답은 9876이다.

반대로 다음 힌트 집합은 숫자를 알아내기에 충분하지 않다.

7360 0 2
9713 1 1
9678 2 2

다음 힌트 집합과 모순되지 않는 숫자는 없다.

9678 2 2
1234 2 2

마지막 두 힌트 집합의 답은 NO다.

여러분은 주어진 힌트 집합으로 내가 생각한 숫자를 알아내는 프로그램을 작성해야 한다.

입력

입력은 다음과 같이 여러 힌트 집합으로 이루어진다. 각 힌트 집합은 내가 생각한 숫자 하나에 대응한다.

< HINT-SET1 >
< HINT-SET2 >
. . .
< HINT-SETi >
. . .
< HINT-SETn >

<HINT-SETi>는 다음 형식의 헤더 한 줄로 시작한다 (L과 H는 공백 한 칸으로 구분한다).

L H

이어서 다음 형식의 힌트 H줄이 나온다 (1 <= j <= H).

TRY1 HIT1 BLOW1
TRY2 HIT2 BLOW2
. . .
TRYj HITj BLOWj
. . .
TRYH HITH BLOWH

L은 내가 생각한 숫자의 자릿수이고, TRYj, HITj, BLOWj는 TRYj와 내가 생각한 숫자 사이의 hit과 blow 값이다. (각 값은 공백 한 칸으로 구분한다.)

입력의 끝은 L = 0, H = 0인 헤더 줄로 나타낸다.

출력

각 힌트 집합마다 답을 한 줄에 하나씩 출력한다. 주어진 힌트 집합으로 숫자를 알아낼 수 있으면 그 숫자를 출력한다. 숫자를 알아낼 수 없으면 NO를 출력한다.

예제1

  1. 예제 1

    입력
    6 4
    160348 0 4
    913286 2 3
    431289 3 1
    671283 3 3
    10 8
    3827690415 2 8
    0482691573 1 9
    1924730586 3 7
    1378490256 1 9
    6297830541 1 9
    4829531706 3 7
    4621570983 1 9
    9820147536 6 4
    4 4
    2713 0 3
    1247 2 0
    1230 1 1
    1387 2 1
    6 5
    605743 0 4
    593026 2 2
    792456 1 2
    143052 1 3
    093614 3 3
    5 2
    12345 5 0
    67890 0 5
    0 0
    
    예상 출력
    637281
    7820914536
    3287
    NO
    NO