문제
너무 심심한 형우는 뒷산에 올라가 돌 떨구기 게임을 하려고 한다.
돌 떨구기 게임은 R x C 판에서 게임을 하게 되며, 판의 칸은 비어있거나, 장애물로 막혀있다. 형우가 돌을 떨궜을 때는 첫 행의 원하는 열에서 떨구게 되며 돌은 다음과 같은 규칙을 적용받고 낙하하게 된다.
해당 칸의 아래에 장애물이 있거나, 맨 마지막 행일 경우 돌은 거기서 멈춘다.
만약 해당 칸의 아래가 비어있을 경우에는 돌은 다음 행으로 내려간다.(열은 동일하다.)
만약 해당 칸의 아래에 돌이 있을 경우 다음과 같은 규칙이 적용된다.
해당 칸의 왼쪽 칸과 왼쪽 칸 아래가 비어있을 경우 돌은 왼쪽으로 움직인다.
왼쪽으로 움직일 수 없는 경우 오른쪽 칸과 오른쪽 아래 칸이 비어있을 경우에 오른쪽으로 움직인다.
두 경우에 해당하지 않으면 그 자리에서 멈춘다.
판의 모양과 돌을 떨구는 순서와 어떤 열에서 돌을 떨구는지가 입력 될 때, 게임을 마치고 나서의 판의 상태를 출력하는 프로그램을 작성하라.
* 만약 돌을 떨구려는 열의 맨 위의 칸이 비어있지 않으면 형우는 돌을 떨구지 않는다.
입력
입력의 첫 번째 줄에는 R, C (1 ≤ R <= 30,000, 1 ≤ C ≤ 30)가 입력되며 이는 판의 행과 열을 뜻한다.
그리고 다음 줄부터 R행에 걸쳐서 보드의 상태가 입력되는데, 각 행은 해당 행의 열 상태가 입력되며, 'X'의 경우에는 장애물이 있는 칸이라는 것이고, '.'의 경우 비어있는 칸을 의미한다.
그 다음에는 N (1 ≤ N ≤ 100,000)이 입력되는데 이는 형우가 떨구게 되는 돌의 개수이다.
그리고 나서 1 이상 C 이하의 정수가 입력되는데 이는 형우가 순서대로 돌을 떨굴 때, 어떤 열에서 돌을 떨구는지를 뜻한다.
전체 데이터의 60%는 R ≤ 30을 만족한다.
출력
판을 출력하되 돌을 다 떨구고 나서 돌들이 위치한 칸에는 'O'를 출력한다.
예제 #1
5 4
....
....
X...
....
....
4
1
1
1
1
....
O...
X...
....
OOO.
예제 #2
7 6
......
......
...XX.
......
......
.XX...
......
6
1
4
4
6
4
4
......
...O..
...XX.
......
.OO...
.XX...
O..O.O