스위치 뒤집기

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

요약
주어진 절차를 그대로 시뮬레이션한다. 뒤집으면 켜지는 전등 수가 늘어나는 가장 번호가 낮은 스위치를 찾아 뒤집기를 반복하고, 최종 상태를 출력한다.
난이도

보통10점 중 6점

유형
시뮬레이션, 그리디, 구현, 배열
정답자
아직 제출이 없습니다

문제

새로 이사한 집의 배선이 이상하다. 전등 여러 개가 스위치 여러 개에 특이한 방식으로 연결되어 있다. 스위치는 위와 아래, 두 상태만 갖는다. 켜짐과 꺼짐이라고 부르는 것은 의미가 없다. 살펴보니 전등마다 스위치 세 개가 연결되어 있고, 그중 최소 하나가 올바른 상태여야 전등이 켜진다. 같은 스위치라도 반대 상태가 다른 전등에게는 올바른 상태일 수 있다.

처음에는 켜지는 전등이 가장 많아지도록 스위치를 맞추려 했다. 그런데 회로에 밝은 요리사가 그건 상당히 어렵다고 해서 목표를 낮췄다. 스위치 하나를 반대 상태로 바꿔도 켜진 전등이 더 늘어나지 않는 상태를 찾아라.

조건을 만족하는 상태가 여러 개일 수 있으므로, 다음 절차로 얻는 상태 하나만 정답으로 인정한다.

  1. 모든 스위치를 위로 둔다.
  2. 1번부터 nn번까지 순서대로 보면서, 그 스위치 하나만 반대로 바꿨을 때 켜진 전등의 개수가 지금보다 늘어나는 스위치를 찾는다.
  3. 그런 스위치가 있으면 번호가 가장 작은 것을 반대로 바꾸고 2번으로 돌아간다. 없으면 멈춘다.

한 번 바꿀 때마다 켜진 전등이 최소 하나 늘어나므로 이 절차는 반드시 끝난다.

입력

입력은 여러 개의 테스트 케이스로 이루어진다.

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

각 테스트 케이스의 첫째 줄에는 전등의 개수 mm (1≤m≤40001 \le m \le 4000)과 스위치의 개수 nn (3≤n≤40003 \le n \le 4000)이 주어진다. 이어지는 mm개의 줄 중 ii번째 줄에는 서로 다른 정수 s1s_1, s2s_2, s3s_3 (1≤si≤n1 \le s_i \le n)이 주어지고, 각 정수 앞에는 + 또는 - 문자가 붙는다. 이 세 값은 ii번 전등을 제어하는 스위치의 번호와 그 스위치의 올바른 상태이며, +는 위, -는 아래를 뜻한다.

출력

각 테스트 케이스마다 위 절차로 얻은 스위치 상태를 한 줄에 출력한다. 상태는 + 또는 -로 이루어진 길이 nn의 문자열이고, ii번째 문자가 ii번 스위치의 상태이다.

예제2

  1. 예제 1

    입력
    2
    5 3
    +1 +2 +3
    +1 -2 +3
    -1 +2 +3
    -1 +2 -3
    -1 -2 +3
    4 4
    +1 +2 +4
    -1 -2 +4
    +2 +3 +4
    -2 -3 +4
    
    예상 출력
    +++
    ++++
    
  2. 예제 2

    입력
    1
    1 3
    -1 -2 -3
    
    예상 출력
    -++