동적 격자 (작은 입력)
면접 대비시간 제한5초메모리 제한512 MB
이진 격자의 셀을 바꾼 뒤 변으로 연결된 1 영역 개수를 셉니다.
문제
행 열 격자가 있고, 각 칸에는 0 또는 1이 들어 있다. 이 격자에 연산을 번 수행한다. 각 연산은 다음 둘 중 하나다.
- M 연산: 격자의 한 칸을 0 또는 1로 바꾼다.
- Q 연산: 1로 이루어진 연결 영역이 몇 개인지 센다. 1의 연결 영역은 값이 모두 1인 칸의 집합 중에서, 영역 안의 어느 칸에서 출발하든 변을 맞댄 칸으로만 움직여 영역 안의 나머지 칸에 모두 도달할 수 있는 최대 집합이다. 꼭짓점만 맞닿은 두 칸은 연결로 보지 않는다.
입력
첫 줄에 테스트 케이스 수 가 주어진다. 이어서 테스트 케이스가 개 주어진다.
각 테스트 케이스의 첫 줄에는 행 수 과 열 수 가 주어진다. 다음 개 줄에는 0과 1로만 이루어진 길이 의 문자열이 한 줄씩 주어지며, 이 줄들이 격자의 초기 상태다. 행 번호는 위에서부터 0, 열 번호는 왼쪽에서부터 0으로 센다.
그다음 줄에는 연산의 개수 이 주어진다. 이어지는 개 줄에 연산이 한 줄에 하나씩 주어진다. M 연산은 M x y z 꼴이고, 행 열 칸의 값을 로 바꾼다. Q 연산은 Q 한 글자로 주어진다.
출력
각 테스트 케이스마다 먼저 Case #x:를 한 줄에 출력한다. 는 1부터 시작하는 테스트 케이스 번호다. 그다음 그 테스트 케이스의 Q 연산마다 순서대로 1의 연결 영역 개수를 한 줄에 하나씩 출력한다. Q 연산이 하나도 없는 테스트 케이스는 Case #x: 줄만 출력한다.