#include <iostream>
#include <vector>
#include <stdio.h>
#include <string>

using namespace std;
#define max 8

char sym[] = {'o', 'x', '.'};

int abs( int p ) {
	if( p < 0 ) return -p;
	return p;
}

void count(int x, int y, int p, int num[2][max][max], char map[max][max], int vx, int vy, int cx, int cy, int mode) {
	if( cx < 0 || cy < 0 || cx >= max || cy >= max ) return;
	if( map[cx][cy] == sym[p] ) {
		if( mode == 0 ) {
			if( vx != 0 ) {
				num[p][x][y] += abs( cx - x ) - 1;
			} else {
				num[p][x][y] += abs( cy - y ) - 1;
			}
		} else {
			for(int i = x, j = y; i != cx || j != cy; i += vx, j += vy) {
				map[i][j] = sym[p];
			}
		}
		return;
	} else if ( map[cx][cy] == sym[2] ) {
		return;
	} else {
		cx += vx;
		cy += vy;
		count( x, y, p, num, map, vx, vy, cx, cy, mode);
	}
}

void search(int x, int y, int p, int num[2][max][max], char map[max][max]){
	if( map[x][y] != '.' ) return;
	count(x, y, p, num, map, 1, 0, x + 1, y, 0);
	count(x, y, p, num, map, 0, 1, x, y + 1, 0);
	count(x, y, p, num, map, -1, 0, x - 1, y, 0);
	count(x, y, p, num, map, 0, -1, x, y - 1, 0);
	count(x, y, p, num, map, 1, 1, x + 1, y + 1, 0);
	count(x, y, p, num, map, 1, -1, x + 1, y - 1, 0);
	count(x, y, p, num, map, -1, 1, x - 1, y + 1, 0);
	count(x, y, p, num, map, -1, -1, x - 1, y - 1, 0);
}

void set(int x, int y, int p, int num[2][max][max], char map[max][max]){
	if( map[x][y] != '.' ) return;
	count(x, y, p, num, map, 1, 0, x + 1, y, 1);
	count(x, y, p, num, map, 0, 1, x, y + 1, 1);
	count(x, y, p, num, map, -1, 0, x - 1, y, 1);
	count(x, y, p, num, map, 0, -1, x, y - 1, 1);
	count(x, y, p, num, map, 1, 1, x + 1, y + 1, 1);
	count(x, y, p, num, map, 1, -1, x + 1, y - 1, 1);
	count(x, y, p, num, map, -1, 1, x - 1, y + 1, 1);
	count(x, y, p, num, map, -1, -1, x - 1, y - 1, 1);
}

void reset(int p, int num[2][max][max]) {
	for(int i = 0; i < max * max ; i++)
		num[p][i / max][i % max ] = 0;
}

int main(void){
//	FILE* fp_in = freopen("data.txt", "r", stdin);

	char map[max][max];
	int num[2][max][max];
	for(int i = 0; i < max; i++) {
		string s;
		cin >> s;
		for(int j = 0; j < max; j++) {
			map[j][i] = s[j];
			num[0][j][i] = 0;
			num[1][j][i] = 0;
		}
	}
	//シュミレーション部分
	int ps[] = {0, 0};
	bool flg = true;

	while( flg ) {
		flg = false;

		for(int i = 0; i < 2; i++) {
			reset(i, num);
			ps[i] = 0;
		}

		//マミの手番
		int posx, posy;
		for(int j = 0; j < max; j ++) {
			for(int i = 0; i < max; i++) {
				search(i, j, 0, num, map);
				if( num[0][i][j] > 0 ) flg = true;
				if( ps[0] < num[0][i][j] ) {
					posx = i;
					posy = j;
					ps[0] = num[0][i][j];
				}
			}
		}

		if( ps[0] > 0 ) {
			set( posx, posy, 0, num, map );
			map[posx][posy] = 'o'; 
		}
		//シャルの手番
		for(int j = max - 1; j >= 0; j --) {
			for(int i = max - 1; i >= 0; i--) {
				search(i, j, 1, num, map);
				if( num[1][i][j] > 0 ) flg = true;
				if( ps[1] < num[1][i][j] ) {
					posx = i;
					posy = j;
					ps[1] = num[1][i][j];
				}
			}
		}
		
		if( ps[1] > 0 ) {
			set( posx, posy, 1, num, map );
			map[posx][posy] = 'x';
		}


	}

	for(int i = 0; i < max; i++) {
		for(int j = 0; j < max; j++)
			cout << map[j][i];
		cout << endl;
	}

 
//	while (1){}
	return 0;
}

Measured memory_bytes: 1184