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

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

이진 문자열 복원

면접 대비

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

요약
인접한 네 가지 쌍 00, 01, 10, 11의 개수가 각각 주어질 때, 그 개수를 만족하는 길이 a+b+c+d+1의 이진 문자열 중 사전순으로 가장 작은 것을 출력하거나 불가능을 보고한다.
난이도

보통10점 중 6점

유형
문자열, 그리디, 구현, 수학
정답자
아직 제출이 없습니다

문제

0과 1로 이루어진 길이 nn의 문자열을 생각한다. 이 문자열에서 인접한 두 글자의 쌍은 모두 n−1n - 1개이고, 각 쌍은 00, 01, 10, 11 중 하나다.

네 정수 aa, bb, cc, dd가 주어진다. 인접한 쌍 중 00이 정확히 aa개, 01이 정확히 bb개, 10이 정확히 cc개, 11이 정확히 dd개인 문자열을 복원한다. 문자열의 길이는 항상 n=a+b+c+d+1n = a + b + c + d + 1이다.

조건을 만족하는 문자열이 여러 개일 수 있으므로, 그중 사전순으로 가장 앞선 하나를 출력한다. 후보의 길이는 모두 같으니 첫 글자부터 차례로 비교하면 된다.

입력

첫째 줄에 테스트의 개수 tt (1≤t≤100001 \le t \le 10000)가 주어진다.

이어지는 tt개의 줄에 각각 네 정수 aa, bb, cc, dd (0≤a,b,c,d≤200 \le a, b, c, d \le 20)가 공백으로 구분되어 주어진다. 모든 테스트에서 a+b+c+d≥1a + b + c + d \ge 1이다.

출력

tt개의 줄을 출력한다. 각 테스트마다 조건을 만족하는 문자열 중 사전순으로 가장 앞선 것을 출력한다. 조건을 만족하는 문자열이 없으면 impossible을 출력한다.

예제2

  1. 예제 1

    입력
    5
    0 0 1 0
    1 0 0 1
    1 1 1 1
    2 1 1 2
    1 2 3 4
    
    예상 출력
    10
    impossible
    00110
    0001110
    10010111110
    
  2. 예제 2

    입력
    4
    1 0 0 0
    0 1 0 0
    0 0 1 0
    0 0 0 1
    
    예상 출력
    00
    01
    10
    11