#include<bits/stdc++.h>
using namespace std;
int n; //地图大小:n*n
int next[10][3]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};//8个方向的偏移量
char a[110][110],ans[110][110];//a:输入数组 ans:答案数组
bool vis[110][110];
string s="yizhong";//寻找目标
bool f=false;//标记是否找到一个完整的yizhong
void dfs(int x,int y,int step){//step:搜索层数
if(step==7){ //搜索到终点
f=true; //f标记为找到
return;
}
for(int i=0;i<8;i++){ //向8个方向搜索
int dx=x+next[i][0],dy=y+next[i][1];
if(dx<1||dx>n||dy<1||dy>n||a[dx][dy]!=s[step]||vis[dx][dy]==1){ //不合法则跳出
continue;
}
vis[dx][dy]=0;
dfs(dx,dy,step+1);
vis[dx][dy]=1;
if(f==true)ans[dx][dy]=a[dx][dy];
}
}
int main() {
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
} //输入
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i][j]=='y'){ //如果找到开头:y
f=false; //f标记为没找到
memset(vis,0,sizeof(vis));
dfs(i,j,0); //开始搜索
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if('a'<=ans[i][j]&&ans[i][j]<='z')cout<<ans[i][j];
else cout<<"*";
}
cout<<endl;
}
return 0;
}