#include using namespace std; using ll=long long; using ld=double; using vll=vector; #define FOR(i,a,b) for(ll i=a;i<(ll)b;++i) #define ROF(i,a,b) for(ll i=a;i>=(ll)b;--i) #define PB push_back int main(){ ios::sync_with_stdio(0);cin.tie(0); int T, N, M; cin >> T >> N >> M; vector> tile(N, vector(M, -1)); vector>* animals = new vector>(N, vector(M, -1)); vector>* animals2 = new vector>(N, vector(M, -1)); for(int y = 0; y < N; y++){ for(int x = 0; x < M; x++){ auto& anim = *animals; tile[y][x] = 0; char in; cin >> in; if(in == 'W'){ anim[y][x] = 100; } else if(in == 'S')anim[y][x] = 200; else anim[y][x] = 0; } } for(int t = 0;t < T; t++){ auto& anim = *animals; auto& anim2 = *animals2; for(int y = 0; y < N; y++){ for(int x = 0; x < M; x++){ anim2[y][x] = 0; } } for(int y = 0; y < N; y++){ for(int x = 0; x < M; x++){ if(anim[y][x] >= 200 && anim[y][x] < 300){ int my = y+1; if(my == N)my = 0; anim2[my][x] = anim[y][x]+1; if(tile[my][x] >= 3){ tile[my][x] = 0; anim2[my][x] = 200; } } } } for(int y = 0; y < N; y++){ for(int x = 0; x < M; x++){ if(anim[y][x] >= 100 && anim[y][x] < 200){ int mx = x+1; if(mx == M)mx = 0; if(anim2[y][mx] >= 200){ anim2[y][mx] = 100; tile[y][mx] = -2000; }else anim2[y][mx] = anim[y][x]+1; } } } for(int y = 0; y < N; y++){//bring out your dead for(int x = 0; x < M; x++){ if(anim2[y][x] == 200 + 5 || anim2[y][x] == 100 + 10){ anim2[y][x] = 0; tile[y][x] = -2000; } } } for(int y = 0; y < N; y++){ for(int x = 0; x < M; x++){ if(t == 0 || tile[y][x] != 0 || anim2[y][x] < 200)tile[y][x]++; } } swap(animals, animals2); } for(int y = 0; y < N; y++){ for(int x = 0; x < M; x++){ auto& anim = *animals; if(anim[y][x] >= 100 && anim[y][x] < 200)cout << "W"; else if(anim[y][x] >= 200 && anim[y][x] < 300)cout << "S"; //else cout << tile[y][x]; else if(tile[y][x] < 0)cout << "*"; else if(tile[y][x] >= 3)cout << "#"; else cout << "."; } cout << endl; } return 0; }