닥터 후의 연회

아직 제출이 없습니다시간 제한1초메모리 제한256 MB

문제

닥터 후가 연회를 열고 손님을 여러 명 초대한다. 손님 ii는 자기를 뺀 다른 손님 정확히 aia_i명과 대화하면 만족한다. 손님은 자기 자신과 대화하지 못하고, 두 손님은 서로 대화하거나 대화하지 않거나 둘 중 하나다. 모든 손님이 만족하도록 대화 짝을 정하고, 그런 배치가 없으면 없다고 답하라.

입력

입력은 데이터 집합 여러 개로 이루어지고, 데이터 집합 하나가 한 줄을 차지한다. 한 줄에는 정수 a1,a2,,ana_1, a_2, \dots, a_n을 공백 하나로 구분해 적는다. aia_i는 손님 ii가 원하는 대화 상대의 수다. 손님 번호는 줄에 적힌 순서대로 11번부터 nn번까지다. 1n100001 \le n \le 10000이고 1ai10001 \le a_i \le 1000이다. 입력은 파일의 끝에서 끝난다.

출력

데이터 집합마다 결과를 한 덩어리씩 출력한다. 모든 손님을 만족시킬 수 있으면 n×nn \times n 행렬 mm을 출력한다. 손님 ii와 손님 jj가 대화하면 m[i][j]=m[j][i]=1m[i][j] = m[j][i] = 1이고, 그렇지 않으면 00이다. 각 행을 한 줄에 출력하고, 같은 행의 값은 공백 하나로 구분한다. 모든 손님을 만족시킬 수 없으면 fail을 출력한다. 덩어리를 하나 출력한 뒤에는 빈 줄을 한 줄 출력한다.

같은 희망 목록을 만족시키는 행렬이 여러 개일 수 있으므로, 다음 방법이 만드는 행렬만 정답으로 인정한다.

손님마다 남은 횟수 rir_iaia_i로 두고 모든 손님을 후보에 넣는다. 후보 중에 ri>0r_i > 0인 손님이 있는 동안 다음을 반복한다. 후보 중에서 rvr_v가 가장 큰 손님 vv를 고르되, 값이 같으면 번호가 작은 쪽을 고른다. 나머지 후보를 rr이 큰 순서로, 값이 같으면 번호가 작은 순서로 늘어놓고 앞에서 rvr_v명을 vv의 대화 상대로 정한다. 새로 짝이 된 손님의 rr11씩 줄이고, rvr_v00으로 바꾼 다음 vv를 후보에서 뺀다. 후보에 남은 손님의 rr이 모두 00이 되면 행렬이 완성된다. 가능한 배치가 하나라도 있으면 이 방법은 반드시 성공한다.