알파리즈 표 붕괴

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

소문자로 채워진 표가 주어진다(예: 표 I). 게임은 여러 단계로 진행된다. 각 단계에서 빈칸이 아닌 문자 ch 를 담고 있는 칸 $E$ 를 하나 고른다. $E$ 에서 출발하여 그 칸의 친구를 모두 찾는다. 친구란 $E$ 와 상하좌우로 바로 맞닿아 있으면서 같은 문자 ch 를 담고 있는 칸, 그리고 그 칸들의 친구, 이런 식으로 더 이상 새로운 친구를 찾을 수 없을 때까지 이어지는 칸들을 말한다. 즉 $E$ 의 친구들은 상하좌우 인접을 기준으로 $E$ 를 포함하는 같은 문자로 이루어진 연결 영역이다. 그런 다음 $E$ 와 모든 친구의 ch 를 빈칸으로 바꾼다. 표 II 는 표 I 에 대해 1행 2열의 칸에서 시작해(이때 cha) 이 규칙을 적용한 결과이다.

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

처음 표와 선택된 칸들의 순서가 주어졌을 때, 위 규칙을 각 선택 칸에 차례대로 적용하고 최종 표를 출력하는 프로그램을 작성하라.

입력

입력은 여러 개의 테스트 케이스로 이루어지며, 입력이 끝날 때까지 연달아 주어진다.

각 테스트 케이스는 문자 표로 시작한다. 문자 표는 각 줄이 $n$ 개의 문자로 이루어진 $m$ 개의 줄로 주어지며($1 \le m, n \le 1000$), 처음 표의 모든 문자는 소문자이다. 표의 각 줄은 문자로만 이루어지므로, 정수로 된 첫 번째 줄에서 표가 끝난다. 그 줄은 선택할 칸의 개수 $k$ 를 담고 있다. 이어서 $k$ 개의 줄이 주어지며, 각 줄에는 선택 칸의 행과 열을 나타내는 두 정수 $r$ 과 $c$ ($1 \le r \le m$, $1 \le c \le n$)가 있다. 좌표는 (이전 단계의 삭제가 반영된) 현재 표를 기준으로 하며, 각 선택 칸은 항상 현재 표 안에 있다.

출력

$i$ 번째 테스트 케이스에 대해 먼저 다음 줄을 출력한다.

Test case #$i$:

그다음 최종 표를 입력과 같은 문자 형식으로 한 줄에 한 행씩 출력한다. 각 행의 뒤쪽 빈칸은 생략하므로 행마다 길이가 다를 수 있다. 표가 완전히 비었다면 이 머리글 줄 뒤에 아무 행도 출력하지 않는다.