Goofy Converter
시간 제한8초메모리 제한512 MB
L과 M이 주어질 때, 각 L[j]가 K[j]부터 M개 원소의 합이 되는 길이 N+M-1의 0/1 수열 K를 찾고, 없으면 Goofy를 출력한다.
문제
Nathan O. Davis는 통합 시스템학과 학생이다. 그는 지금 집적 회로 수업을 듣고 있다. 그는 멍청하다. 어느 날 그는 다음과 같은 과제를 받았다. 양의 정수 수열을 입력으로 받아, 원래 입력 수열을 유일하게 복원할 수 있는 1비트 정수 수열을 출력하는 논리 회로를 설계하라.
Nathan은 전혀 감이 잡히지 않았다. 그래서 인터넷에서 힌트를 찾아보았고, 1비트 DAC을 설명하는 여러 페이지를 발견했다. 1비트 DAC은 양의 정수 수열을 입력으로 받아 1비트 정수 수열을 출력하는 디지털-아날로그 변환기의 한 종류이다.
이 페이지들에서 1비트 DAC이 어떻게 동작하는지 보고, Nathan은 원하는 변환기에 대한 새로운 아이디어를 떠올렸다. 그의 변환기는 양의 정수 수열 L과 수열 외에 양의 정수 M을 받아, 다음을 만족하는 1비트 정수 수열 K를 출력한다.
그러나 그는 그렇게 똑똑하지 않다. 그의 변환기가 일부 수열에서는 동작하지 않는다는 것은 분명하다. 당신의 임무는 Nathan을 절망에 빠뜨리더라도, 새로운 변환기가 그의 과제 요구 사항을 만족할 수 없음을 보여주는 프로그램을 작성하는 것이다.
입력
입력은 여러 개의 데이터 세트로 이루어진다. 각 데이터 세트는 다음 형식으로 주어진다.
N M
L0 L1 . . . LN-1
N은 수열 L의 길이이다. M과 L은 위에서 설명한 Nathan의 변환기에 대한 입력이다. 다음을 가정할 수 있다. 1 ≤ N ≤ 1000, 1 ≤ M ≤ 12, 그리고 j = 0, . . . , N - 1에 대해 0 ≤ Lj ≤ M이다.
입력은 N = M = 0으로 끝난다.
출력
각 데이터 세트에 대해, 위에 언급된 방정식을 만족하는 수열이 존재하면 길이 (N + M - 1)의 이진 수열 K를 출력하고, 그렇지 않으면 “Goofy”(따옴표 제외)를 출력한다. 가능한 수열이 여러 개라면 그중 아무거나 하나를 출력한다.