#include using namespace std; //ios_base::sync_with_stdio(false); struct zvire { char typ; int r, c; int jidlo; bool mrtve = false; }; int main() { int T, R, C; cin >> T >> R >> C; int mapa[R][C]; vector zvirata; for(int r = 0; r < R; r++) { for(int c = 0; c < C; c++) { char x; cin >> x; mapa[r][c] = 3; if(x == 'S' || x == 'W') { zvire z; z.typ = x; z.r = r; z.c = c; z.jidlo = 0; zvirata.push_back(z); } } } for(int t = 0; t < T; t++) { for(int i = 0; i < zvirata.size(); i++) { if(zvirata[i].typ == 'W') { zvirata[i].c++; zvirata[i].c %= C; } if(zvirata[i].typ == 'S') { zvirata[i].r++; zvirata[i].r %= R; } } for(zvire &z1: zvirata) { if(z1.typ == 'S') { if(mapa[z1.r][z1.c] == 0) { mapa[z1.r][z1.c] = 4; z1.jidlo = -1; } } else { for(zvire &z2 : zvirata) { if(z1.r == z2.r && z1.c == z2.c && z2.typ == 'S') { z2.mrtve = true; z1.jidlo = -1; mapa[z1.r][z1.c] = -1; } } } } for(int i = zvirata.size() -1 ; i >= 0; i--) { if(zvirata[i].mrtve) { zvirata.erase(zvirata.begin() + i); } } for(int r = 0; r < R; r++) { for(int c = 0; c < C; c++) { if(mapa[r][c] > 0) { mapa[r][c]--; } } } for(int i = 0; i < zvirata.size(); i++) { zvirata[i].jidlo++; if(zvirata[i].typ == 'W' && zvirata[i].jidlo >= 10) { zvirata[i].mrtve = true; mapa[zvirata[i].r][zvirata[i].c] = -1; } if(zvirata[i].typ == 'S' && zvirata[i].jidlo >= 5) { zvirata[i].mrtve = true; mapa[zvirata[i].r][zvirata[i].c] = -1; } } for(int i = zvirata.size() -1 ; i >= 0; i--) { if(zvirata[i].mrtve) { zvirata.erase(zvirata.begin() + i); } } } for(int i = 0; i < zvirata.size(); i++) { mapa[zvirata[i].r][zvirata[i].c] = zvirata[i].typ; } for(int r = 0; r < R; r++) { for(int c = 0; c < C; c++) { if(mapa[r][c] == -1) { cout << '*'; } else if(mapa[r][c] == 0) { cout << '#'; } else if(mapa[r][c] < 10) { cout << '.'; } else { cout << (char)mapa[r][c]; } } cout << endl; } return 0; }