페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#2153

돌 떨구기 1s - MB

문제

너무 심심한 형우는 뒷산에 올라가 돌 떨구기 게임을 하려고 한다.

돌 떨구기 게임은 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

출처

COCI 2006/2007 contest6 4

로그인해야 코드를 작성할 수 있어요.