/*
Task rocks
Author Plamenka Hristova
*/

#include <cstdio>

using namespace std;

int R, S, N;
char a[30000][32];

struct board {
   char row[30000];
   int r;

   void stoprock() {
      a[r-1][row[r-1]] = 'O';
   }

   void sr() {
      for( ;; ) {
         int s = row[r-1];

         if( r > 1 && a[r-1][s] != '.' ) { --r; continue; }

         if( r == R ) break;
         if( a[r][s] == 'X' ) break;
         if( a[r][s] == '.' ) {
            row[r++] = s;
         } else {
            if( s > 0 && a[r][s-1] == '.' && a[r-1][s-1] == '.' ) {
               row[r++] = s-1;
            } else if( s+1 < S && a[r][s+1] == '.' && a[r-1][s+1] == '.' ) {
               row[r++] = s+1;
            } else {
               break;
            }
         }
      }
   }
} P[30];

int main( ) {
      int s;
      scanf( "%d%d", &R, &S );
   for( int r = 0; r < R; ++r ) scanf( "%s", a[r] );

   for( int i = 0; i < S; ++i ) {
      P[i].row[0] = i;
      P[i].r = 1;
      P[i].sr();
   }

   scanf( "%d", &N );
   for( int i = 0; i < N; ++i ) {

      scanf( "%d", &s ); --s;
      P[s].stoprock();
      for( int i = 0; i < S; ++i ) P[i].sr();
   }

   for( int r = 0; r < R; ++r ) printf( "%s\n", a[r] );

  return 0;
}
