만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

출납장부

면접 대비

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

요약
N개의 금액과 부호 있는 합계 F가 주어질 때, 합이 F가 되는 모든 부호 선택에서 각 금액이 더하기로 정해지는지, 빼기로 정해지는지, 자유로운지를 판정한다.
난이도

보통10점 중 6점

유형
동적 계획법, 백트래킹, 완전 탐색, 구현
정답자
아직 제출이 없습니다

문제

부패 척결 재단이 놀로니아에서 대규모 부패 사건을 적발했다. 수사 과정에서 조직의 불법 거래를 적어 둔 공책과 장부 여러 권을 압수했다.

장부의 페이지에는 거래 금액이 놀로니아의 화폐 단위인 닐로고(기호는 N$)로 적혀 있고, 그 페이지의 거래를 모두 합한 현금 흐름도 함께 적혀 있다. 예를 들어 어떤 페이지에 N$ 7 입금, N$ 2 입금, N$ 3 출금, N$ 1 입금, N$ 11 출금이 기록되어 있으면 이 페이지의 현금 흐름은 7+2−3+1−11=−47 + 2 - 3 + 1 - 11 = -4 이다.

장부를 적은 사람들은 수사를 어렵게 하려고 각 거래가 입금인지 출금인지 표시하지 않았다. 위의 예에서 페이지에 남은 금액 기록은 7, 2, 3, 1, 11 뿐이다. 반면 현금 흐름은 언제나 부호까지 그대로 적혀 있어서, 이 페이지에는 −4-4가 적혀 있다.

기소하려면 각 거래가 입금인지 출금인지 확실하게 말할 수 있어야 한다. 위의 예에서 N$ 7은 반드시 입금이고 N$ 11은 반드시 출금이다. 그러나 N$ 2, N$ 3, N$ 1은 어느 쪽인지 확정할 수 없다. N$ 2와 N$ 1이 입금이고 N$ 3이 출금일 수도 있고, N$ 2와 N$ 1이 출금이고 N$ 3이 입금일 수도 있다.

거래가 많이 적힌 페이지는 손으로 복원하기 어렵다. 각 거래의 종류를 판정하는 프로그램을 작성하시오.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에 페이지에 적힌 거래의 개수 NN과 그 페이지의 현금 흐름 FF가 공백으로 구분되어 주어진다(2≤N≤402 \le N \le 40, −16000≤F≤16000-16000 \le F \le 16000). 이어지는 NN개의 줄에는 ii번째 거래의 금액 TiT_i가 한 줄에 하나씩 주어진다(1≤Ti≤10001 \le T_i \le 1000).

마지막 테스트 케이스 다음 줄에는 공백으로 구분된 0 두 개만 주어진다.

출력

각 테스트 케이스마다 NN개의 문자로 이루어진 한 줄을 출력한다. ii번째 문자는 ii번째 거래가 반드시 입금이면 +, 반드시 출금이면 -, 어느 쪽인지 확정할 수 없으면 ?이다.

적힌 현금 흐름을 만드는 입금과 출금의 조합이 없으면 그 테스트 케이스에는 * 한 문자만 있는 줄을 출력한다.

예제3

  1. 예제 1

    입력
    5 7
    1
    2
    3
    4
    5
    4 15
    3
    5
    7
    11
    5 12
    6
    7
    7
    1
    7
    0 0
    
    예상 출력
    ?+??+
    *
    +??-?
  2. 예제 2

    입력
    2 0
    5
    5
    2 3
    1
    2
    2 -3
    1
    2
    2 1
    1
    2
    2 5
    1
    2
    0 0
    
    예상 출력
    ??
    ++
    --
    -+
    *
  3. 예제 3

    입력
    3 998
    1000
    1
    1
    4 0
    10
    4
    3
    3
    0 0
    
    예상 출력
    +--
    ????