#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0; i<n;i++)
vector<vector<char>>s(8,vector<char>(8));
bool inrange(int y,int x){return (0<=y&&y<8&&0<=x&&x<8);}
bool foo=false;
int cnt,ty,tx;
void init(){foo=false; cnt=0;}
void _set(int a,int b){ty=a;tx=b;cnt=0; foo=false;}
void update(int y,int x,char key){
    vector<vector<char>>temp;
    temp=s;
    init();
    temp[y][x]=key;
    for(int i=x+1; i<8;i++){
        if(temp[y][i]==key){foo=true; break;}
        if(temp[y][i]=='.')break;
        cnt++;
    }
    if(foo)rep(i,cnt)temp[y][x+1+i]=key;
    init();
    for(int i=x-1; i>=0; i--){
        if(temp[y][i]==key){foo=true;break;}
        if(temp[y][i]=='.')break;
        cnt++;
    }
    if(foo)rep(i,cnt)temp[y][x-1-i]=key;
    init();
    for(int i=y+1; i<8;i++){
        if(temp[i][x]==key){foo=true; break;}
        if(temp[i][x]=='.')break;
        cnt++;
    }
    if(foo)rep(i,cnt)temp[y+i+1][x]=key;
    init();
    for(int i=y-1;i>=0;i--){
        if(temp[i][x]==key){foo=true; break;}
        if(temp[i][x]=='.')break;
        cnt++;
    }
    if(foo)rep(i,cnt)temp[y-1-i][x]=key;
    _set(y,x);
    for(int i=0; i<8;i++){
        ++ty,++tx;
        if(!inrange(ty,tx))break;
        if(temp[ty][tx]==key){foo=true;break;}
        if(temp[ty][tx]=='.')break;
        cnt++;
    }
    if(foo)rep(i,cnt)temp[y+1+i][x+1+i]=key;
    _set(y,x);
    for(int i=0; i<8;i++){
        ++ty,--tx;
        if(!inrange(ty,tx))break;
        if(temp[ty][tx]==key){foo=true;break;}
        if(temp[ty][tx]=='.')break;
        cnt++;
    }
    if(foo)rep(i,cnt)temp[y+1+i][x-1-i]=key;
    _set(y, x);
    for(int i=0; i<8;i++){
        --ty;--tx;
        if(!inrange(ty,tx))break;
        if(temp[ty][tx]==key){foo=true;break;}
        if(temp[ty][tx]=='.')break;
        cnt++;
    }
    if(foo)rep(i,cnt)temp[y-1-i][x-1-i]=key;
    _set(y,x);
    for(int i=0; i<8;i++){
        --ty,++tx;
        if(!inrange(ty,tx))break;
        if(temp[ty][tx]==key){foo=true;break;}
        if(temp[ty][tx]=='.')break;
        cnt++;
    }
    if(foo)rep(i,cnt)temp[y-i-1][x+1+i]=key;
    s=temp;
    
}
int cal(int y,int x, char key){
    vector<vector<char>>temp;
    temp=s;
    temp[y][x]=key;
    int ans=0;
    init();
    for(int i=x+1; i<8;i++){
        if(temp[y][i]==key){foo=true; break;}
        if(temp[y][i]=='.')break;
        cnt++;
    }
    if(foo)ans+=cnt;
    init();
    for(int i=x-1; i>=0; i--){
        if(temp[y][i]==key){foo=true;break;}
        if(temp[y][i]=='.')break;
        cnt++;
    }
    if(foo)ans+=cnt;
    init();
    for(int i=y+1; i<8;i++){
        if(temp[i][x]==key){foo=true; break;}
        if(temp[i][x]=='.')break;
        cnt++;
    }
    if(foo)ans+=cnt;
    init();
    for(int i=y-1;i>=0;i--){
        if(temp[i][x]==key){foo=true; break;}
        if(temp[i][x]=='.')break;
        cnt++;
    }
    if(foo)ans+=cnt;
    init();
    _set(y,x);
    for(int i=0; i<8;i++){
        ++ty,++tx;
        if(!inrange(ty,tx))break;
        if(temp[ty][tx]==key){foo=true;break;}
        if(temp[ty][tx]=='.')break;
        cnt++;
    }
    if(foo)ans+=cnt;
    _set(y,x);
    for(int i=0; i<8;i++){
        ++ty,--tx;
        if(!inrange(ty,tx))break;
        if(temp[ty][tx]==key){foo=true;break;}
        if(temp[ty][tx]=='.')break;
        cnt++;
    }
    if(foo)ans+=cnt;
    _set(y, x);
    for(int i=0; i<8;i++){
        --ty;--tx;
        if(!inrange(ty,tx))break;
        if(temp[ty][tx]==key){foo=true;break;}
        if(temp[ty][tx]=='.')break;
        cnt++;
    }
    if(foo)ans+=cnt;
    _set(y,x);
    for(int i=0; i<8;i++){
        --ty,++tx;
        if(!inrange(ty,tx))break;
        if(temp[ty][tx]==key){foo=true;break;}
        if(temp[ty][tx]=='.')break;
        cnt++;
    }
    if(foo)ans+=cnt;
    return ans;
}

int main(){
    rep(i,8)rep(j,8)cin>>s[i][j];
    char key='o';
    bool flag=false;
    while(true){
        int maxi=0;
        pair<int,int>let;
        if(key=='o'){
            for(int i=0; i<8;i++){
                for(int j=0; j<8;j++){
                    if(s[i][j]!='.')continue;
                    int t=cal(i,j,key);
                    if(t>maxi){
                        maxi=t;
                        let=pair<int,int>(i,j);
                    }
                }
            }
        }else{
            for(int i=7; i>=0;i--){
                for(int j=7; j>=0;j--){
                    if(s[i][j]!='.')continue;
                    int t=cal(i,j,key);
                    if(t>maxi){
                        maxi=t;
                        let=pair<int,int>(i,j);
                    }
                }
            }
            
        }
        if(flag&&maxi==0)break;
        else flag=false;
        if(maxi==0){flag=true; key=(key=='o'?'x':'o');continue;}
        update(let.first,let.second,key);
        key=(key=='o'?'x':'o');
    }
    rep(i,8){rep(j,8)cout<<s[i][j]; cout<<endl;}
}

Measured memory_bytes: 3136