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

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

밀크셰이크 (Small)

면접 대비

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

요약
각 고객이 좋아하는 종류 중 최소 하나를 만들면서 맥아 배치 수를 최소로 하도록 모든 맛을 맥아 또는 일반으로 정한다. 고객마다 좋아하는 맥아 종류는 최대 하나다.
난이도

보통10점 중 5점

유형
그리디, 구현, 완전 탐색, 수학
정답자
아직 제출이 없습니다

문제

밀크셰이크 가게를 운영한다. 준비할 수 있는 맛은 NN가지이고, 맛마다 몰트를 넣은 것과 넣지 않은 것을 만들 수 있다. 따라서 만들 수 있는 밀크셰이크 종류는 모두 2N2N가지다.

손님마다 좋아하는 밀크셰이크 종류의 집합이 정해져 있고, 그중 하나라도 준비해 두면 그 손님은 만족한다. 한 손님이 좋아하는 종류 중 몰트를 넣은 것은 많아도 하나다.

다음 조건을 모두 만족하도록 밀크셰이크를 NN통 만들려고 한다.

  • 맛마다 정확히 한 통을 만들고, 그 통은 몰트를 넣거나 넣지 않는다.
  • 손님마다 그 손님이 좋아하는 종류를 적어도 하나 만든다.
  • 몰트를 넣은 통의 수가 가능한 한 적다.

모든 손님을 만족시킬 수 있는지 판정하고, 가능하면 어떤 종류를 만들어야 하는지 구하라.

모든 손님을 만족시킬 수 있는 경우, 몰트를 넣은 통의 수를 최소로 하는 답은 하나뿐이다.

입력

첫째 줄에 테스트 케이스의 수 CC가 주어진다.

각 테스트 케이스는 다음과 같이 주어진다.

  • 첫째 줄에 밀크셰이크 맛의 수 NN이 주어진다.
  • 둘째 줄에 손님의 수 MM이 주어진다.
  • 이어지는 MM개의 줄에 손님 한 명의 정보가 각각 주어진다. 각 줄은 그 손님이 좋아하는 종류의 개수 TT로 시작하고, 그 뒤에 정수 쌍 X YX\ Y가 TT개 온다. XX는 맛 번호로 11 이상 NN 이하이고, YY는 몰트를 넣지 않은 것이면 00, 넣은 것이면 11이다.

같은 줄의 수는 모두 공백 하나로 구분된다.

제한

  • 1≤C≤1001 \le C \le 100
  • 1≤N≤101 \le N \le 10
  • 1≤M≤1001 \le M \le 100
  • T≥1T \ge 1
  • 한 손님의 정보에서 같은 쌍 (X,Y)(X, Y)는 두 번 나오지 않는다.
  • 한 손님이 좋아하는 종류 중 Y=1Y = 1인 쌍은 많아도 하나다.

출력

테스트 케이스마다 한 줄씩, 입력에 주어진 순서대로 CC개의 줄을 출력한다. 각 줄은 Case #X: 로 시작한다. 여기서 XX는 11부터 시작하는 테스트 케이스 번호다. 그 뒤에 이어서 다음을 출력한다.

  • 손님의 취향을 모두 만족시킬 수 없으면 IMPOSSIBLE을 출력한다.
  • 만족시킬 수 있으면 11번 맛부터 NN번 맛까지에 대응하는 정수 NN개를 공백으로 구분해 출력한다. 그 맛을 몰트 없이 준비해야 하면 00, 몰트를 넣어 준비해야 하면 11이다.

힌트

첫 번째 예제의 첫째 테스트 케이스에서는 첫 손님을 만족시키려고 11번 맛에 몰트를 넣어야 한다. 나머지 맛은 모두 몰트를 넣지 않아도 된다. 둘째 손님은 몰트를 넣지 않은 22번 맛으로, 셋째 손님은 몰트를 넣지 않은 55번 맛으로 만족한다.

둘째 테스트 케이스에는 맛이 하나뿐이다. 한 손님은 몰트를 넣은 것을 좋아하고 다른 손님은 넣지 않은 것을 좋아하므로, 두 손님을 함께 만족시킬 수 없다.

예제2

  1. 예제 1

    입력
    2
    5
    3
    1 1 1
    2 1 0 2 0
    1 5 0
    1
    2
    1 1 0
    1 1 1
    
    예상 출력
    Case #1: 1 0 0 0 0
    Case #2: IMPOSSIBLE
    
  2. 예제 2

    입력
    1
    3
    3
    1 1 1
    2 1 0 2 1
    2 2 0 3 1
    
    예상 출력
    Case #1: 1 1 1