#include<bits/stdc++.h>
using namespace std;
int n;
char a[102][102],g[102][102];
bool f[102][102];
int fx[]={0,1,1,1,0,0,-1,-1,-1};
int fy[]={0,1,0,-1,1,-1,1,0,-1};
string e="yizhong";
struct Node{
int xx,yy;
}r[102];
bool yizhong(int x,int y,char k){
char p;
if(k=='g'){
for(int i=1;i<=8;i++){
if(a[x+fx[i]][y+fy[i]]=='n'){
return 1;
}
}
return 0;
}else{
for(int i=0;i<e.size()-1;i++){
if(e[i]==k){
p=e[i+1];
break;
}
}
for(int i=1;i<=8;i++){
if(a[x+fx[i]][y+fy[i]]==p){
return 1;
}
}
return 0;
}
}
void dfs(int x,int y,string s,Node k[],int p){
if(s==e){
for(int i=1;i<=p;i++){
f[k[i].xx][k[i].yy]=1;
}
memset(k,0,sizeof(k));
return;
}
for(int i=0;i<s.size();i++){
if(s[i]!=e[i]){
cout<<s<<" "<<x<<" "<<y<<endl;
return;
}
}
for(int i=1;i<=8;i++){
int tx=x+fy[i];
int ty=y+fy[i];
if(tx>=1&&tx<=n&&ty>=1&&ty<=n&&g[tx][ty]!='*'){
k[p].xx=tx;
k[p].yy=ty;
dfs(tx,ty,s+g[tx][ty],k,p+1);
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
if(a[i][j]!='y'&&a[i][j]!='i'&&a[i][j]!='z'&&a[i][j]!='h'&&a[i][j]!='o'&&a[i][j]!='n'&&a[i][j]!='g'){
g[i][j]='*';
}else{
g[i][j]=a[i][j];
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(g[i][j]!='*'){
if(!yizhong(i,j,g[i][j])){
g[i][j]='*';
}
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(g[i][j]=='y'){
dfs(i,j,"",r,1);
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(f[i][j]!=1){
g[i][j]='*';
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<g[i][j];
}
cout<<endl;
}
return 0;
}