알파리즈 표 붕괴
시간 제한1초메모리 제한128 MB
문자 격자와 선택한 칸 목록이 주어질 때, 각 칸이 속한 4방향 연결 같은 문자 영역을 지우고 행은 왼쪽으로 열은 아래로 밀어 빈 행과 열을 삭제하는 과정을 반복한다.
문제
소문자로 채워진 표가 주어진다(예: 표 I). 게임은 여러 단계로 진행된다. 각 단계에서 빈칸이 아닌 문자 ch 를 담고 있는 칸 를 하나 고른다. 에서 출발하여 그 칸의 친구를 모두 찾는다. 친구란 와 상하좌우로 바로 맞닿아 있으면서 같은 문자 ch 를 담고 있는 칸, 그리고 그 칸들의 친구, 이런 식으로 더 이상 새로운 친구를 찾을 수 없을 때까지 이어지는 칸들을 말한다. 즉 의 친구들은 상하좌우 인접을 기준으로 를 포함하는 같은 문자로 이루어진 연결 영역이다. 그런 다음 와 모든 친구의 ch 를 빈칸으로 바꾼다. 표 II 는 표 I 에 대해 1행 2열의 칸에서 시작해(이때 ch 는 a) 이 규칙을 적용한 결과이다.

같은 단계 안에서 계속하여, 먼저 빈칸이 아닌 문자들을 모두 왼쪽으로 최대한 밀어 각 행의 빈칸이 오른쪽으로 모이게 한다(표 III). 이어서 빈칸이 아닌 문자들을 모두 아래로 최대한 밀어 각 열의 빈칸이 위로 모이게 한다(표 IV). 마지막으로, 완전히 빈칸이 된 행이나 열은 삭제하여 표를 줄인다.

처음 표와 선택된 칸들의 순서가 주어졌을 때, 위 규칙을 각 선택 칸에 차례대로 적용하고 최종 표를 출력하는 프로그램을 작성하라.
입력
입력은 여러 개의 테스트 케이스로 이루어지며, 입력이 끝날 때까지 연달아 주어진다.
각 테스트 케이스는 문자 표로 시작한다. 문자 표는 각 줄이 개의 문자로 이루어진 개의 줄로 주어지며(), 처음 표의 모든 문자는 소문자이다. 표의 각 줄은 문자로만 이루어지므로, 정수로 된 첫 번째 줄에서 표가 끝난다. 그 줄은 선택할 칸의 개수 를 담고 있다. 이어서 개의 줄이 주어지며, 각 줄에는 선택 칸의 행과 열을 나타내는 두 정수 과 (, )가 있다. 좌표는 (이전 단계의 삭제가 반영된) 현재 표를 기준으로 하며, 각 선택 칸은 항상 현재 표 안에 있다.
출력
번째 테스트 케이스에 대해 먼저 다음 줄을 출력한다.
Test case #:
그다음 최종 표를 입력과 같은 문자 형식으로 한 줄에 한 행씩 출력한다. 각 행의 뒤쪽 빈칸은 생략하므로 행마다 길이가 다를 수 있다. 표가 완전히 비었다면 이 머리글 줄 뒤에 아무 행도 출력하지 않는다.