#include using namespace std; #define rp(i, n) for(int i = 0; i > &v, pair x){ for(int i = v.size() - 1; i>=0; i--){ if(v[i] == x) v.erase(v.begin() + i); } } struct sq{ vector > ani, nw; int tp; int last; }; int main(){ int n, m, t; cin >> t >> n >> m; sq g[n][m]; rp(i, n){ rp(j, m){ char c; cin >> c; g[i][j].last = -1; g[i][j].tp = 0; if(c =='W') g[i][j].ani.push_back({'W', -1}); if(c =='S') g[i][j].ani.push_back({'S', -1}); } } rp(k, t){ rp(i, n){ rp(j, m){ for(auto x: g[i][j].ani){ if(x.first == 'W') g[i][(j + 1) % m].nw.push_back(x); if(x.first == 'S') g[(i + 1) % n][j].nw.push_back(x); } g[i][j].ani.clear(); } } rp(i, n){ rp(j, m){ g[i][j].ani = g[i][j].nw; g[i][j].nw.clear(); if(g[i][j].ani.size() == 2){ for(auto x: g[i][j].ani){ if(x.first == 'S') er(g[i][j].ani, x); g[i][j].tp = 2; g[i][j].ani[0].second = k; } } for(auto x: g[i][j].ani){ if(x.first == 'S' && g[i][j].tp == 1){ g[i][j].tp = 0; g[i][j].last = k; g[i][j].ani[0].second = k; } } for(auto x: g[i][j].ani){ if(x.first == 'W' && x.second <= k - 10){ er(g[i][j].ani, x); g[i][j].tp = 2; } if(x.first == 'S' && x.second <= k - 5) { er(g[i][j].ani, x); g[i][j].tp = 2; } } if(g[i][j].tp == 0 && g[i][j].last == k - 3) g[i][j].tp = 1; } } } rp(i, n){ rp(j, m){ if(g[i][j].ani.size()){ cout << g[i][j].ani[0].first; } else if(g[i][j].tp == 0) cout << '.'; else if(g[i][j].tp == 1) cout << '#'; else if(g[i][j].tp == 2) cout << '*'; } cout << endl; } }