돌 던지기

시간 제한1초메모리 제한128 MB

문제

R × C 보드가 세워져 있다. 각 칸은 빈 칸 . 또는 벽 X이다. 이후 여러 개의 돌을 하나씩 떨어뜨린다. 각 돌은 지정된 열의 맨 윗칸에서 시작하며, 입력은 항상 그 칸이 비어 있도록 주어진다.

돌은 멈출 때까지 다음 규칙을 반복한다.

  1. 바로 아래 칸이 보드 밖이거나 벽이면 현재 칸에 멈춘다.
  2. 바로 아래 칸이 빈 칸이면 한 칸 아래로 이동한다.
  3. 바로 아래 칸에 다른 돌이 있으면 먼저 왼쪽으로 미끄러질 수 있는지 확인한다. 현재 칸의 왼쪽 칸과 왼쪽 아래 칸이 모두 빈 칸이면 왼쪽 아래로 이동한다.
  4. 왼쪽으로 이동할 수 없고, 현재 칸의 오른쪽 칸과 오른쪽 아래 칸이 모두 빈 칸이면 오른쪽 아래로 이동한다.
  5. 어느 쪽으로도 미끄러질 수 없으면 현재 칸에 멈춘다.

보드 밖의 칸은 빈 칸으로 보지 않는다. 한 돌이 완전히 멈춘 뒤에야 다음 돌을 떨어뜨린다. 모든 돌을 떨어뜨린 뒤의 보드를 출력하라.

입력

첫째 줄에 보드의 크기 RC가 주어진다. (1 ≤ R ≤ 30,000, 1 ≤ C ≤ 30)

다음 R개 줄에는 보드의 초기 상태가 주어진다. 각 줄은 길이 C의 문자열이며, .는 빈 칸, X는 벽을 뜻한다.

다음 줄에는 돌을 떨어뜨리는 횟수 N이 주어진다. (1 ≤ N ≤ 100,000)

다음 N개 줄에는 돌을 떨어뜨릴 열의 번호가 순서대로 주어진다. 가장 왼쪽 열의 번호는 1이다.

출력

게임이 모두 끝난 뒤의 보드를 위에서부터 R줄에 걸쳐 출력한다. 돌이 놓인 칸은 O로 출력한다.