스위치 뒤집기
시간 제한7초메모리 제한512 MB
주어진 절차를 그대로 시뮬레이션한다. 뒤집으면 켜지는 전등 수가 늘어나는 가장 번호가 낮은 스위치를 찾아 뒤집기를 반복하고, 최종 상태를 출력한다.
문제
새로 이사한 집의 배선이 이상하다. 전등 여러 개가 스위치 여러 개에 특이한 방식으로 연결되어 있다. 스위치는 위와 아래, 두 상태만 갖는다. 켜짐과 꺼짐이라고 부르는 것은 의미가 없다. 살펴보니 전등마다 스위치 세 개가 연결되어 있고, 그중 최소 하나가 올바른 상태여야 전등이 켜진다. 같은 스위치라도 반대 상태가 다른 전등에게는 올바른 상태일 수 있다.
처음에는 켜지는 전등이 가장 많아지도록 스위치를 맞추려 했다. 그런데 회로에 밝은 요리사가 그건 상당히 어렵다고 해서 목표를 낮췄다. 스위치 하나를 반대 상태로 바꿔도 켜진 전등이 더 늘어나지 않는 상태를 찾아라.
조건을 만족하는 상태가 여러 개일 수 있으므로, 다음 절차로 얻는 상태 하나만 정답으로 인정한다.
- 모든 스위치를 위로 둔다.
- 1번부터 번까지 순서대로 보면서, 그 스위치 하나만 반대로 바꿨을 때 켜진 전등의 개수가 지금보다 늘어나는 스위치를 찾는다.
- 그런 스위치가 있으면 번호가 가장 작은 것을 반대로 바꾸고 2번으로 돌아간다. 없으면 멈춘다.
한 번 바꿀 때마다 켜진 전등이 최소 하나 늘어나므로 이 절차는 반드시 끝난다.
입력
입력은 여러 개의 테스트 케이스로 이루어진다.
첫째 줄에 테스트 케이스의 개수 ()가 주어진다.
각 테스트 케이스의 첫째 줄에는 전등의 개수 ()과 스위치의 개수 ()이 주어진다. 이어지는 개의 줄 중 번째 줄에는 서로 다른 정수 , , ()이 주어지고, 각 정수 앞에는 + 또는 - 문자가 붙는다. 이 세 값은 번 전등을 제어하는 스위치의 번호와 그 스위치의 올바른 상태이며, +는 위, -는 아래를 뜻한다.
출력
각 테스트 케이스마다 위 절차로 얻은 스위치 상태를 한 줄에 출력한다. 상태는 + 또는 -로 이루어진 길이 의 문자열이고, 번째 문자가 번 스위치의 상태이다.