#include<bits/stdc++.h>
using namespace std;
const int N=6;
char mp[N][N];
bool vis[N][N];
bool if_X[N][N];
int num_X[N][N];
int ssum;
void dfs(int num)
{
if(num==16)
{
bool pd=true;
int mb,res;
for(int i=1;i<=4;i++)
{
for(int j=1;j<=4;j++)
{
if(mp[i][j]>='0'&&mp[i][j]<='8')
{
mb=mp[i][j]-'0';
res=0;
res+=if_X[i-1][j-1]==1?1:0;
res+=if_X[i-1][j]==1?1:0;
res+=if_X[i-1][j+1]==1?1:0;
res+=if_X[i][j-1]==1?1:0;
res+=if_X[i][j+1]==1?1:0;
res+=if_X[i+1][j-1]==1?1:0;
res+=if_X[i+1][j]==1?1:0;
res+=if_X[i+1][j+1]==1?1:0;
if(mb!=res)
{
pd=false;
}
}
}
}
if(pd)
{
ssum++;
for(int x=1;x<=4;x++)
{
for(int y=1;y<=4;y++)
{
if(if_X[x][y])
{
num_X[x][y]++;
}
}
}
}
return;
}
int x=num/4+1;
int y=num%4+1;
if_X[x][y]=false;
dfs(num+1);
if(!(mp[x][y]<='8'&&mp[x][y]>='0'))
{
if_X[x][y]=true;
dfs(num+1);
}
}
void solve()
{
for(int i=1;i<=4;i++)
{
for(int j=1;j<=4;j++)
{
cin>>mp[i][j];
}
}
dfs(0);
for(int i=1;i<=4;i++)
{
for(int j=1;j<=4;j++)
{
if(mp[i][j]>='0'&&mp[i][j]<='8')
{
cout<<mp[i][j];
}
else{
if(ssum>0&&num_X[i][j]==ssum)
{
cout<<'X';
}
else if(num_X[i][j]==0)
{
cout<<"O";
}
else
{
cout<<mp[i][j];
}
}
}
cout<<endl;
}
}
int main()
{
solve();
return 0;
}