#include<bits/stdc++.h>
using namespace std;

#define rp(i, n) for(int i = 0; i<n; i++)

void er(vector<pair<char, int> > &v, pair<char, int> x){
	for(int i = v.size() - 1; i>=0; i--){
		if(v[i] == x) v.erase(v.begin() + i);
	}
}

struct sq{
	vector<pair<char, int> > 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;
	}
	
	
}