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

using namespace std;

vector<string> split(string & s, const char & c) {
	string buffer { "" };

   	vector<string> resultado;
	
    for (char caractere : s) {
		if (caractere != c) {
			buffer += caractere;
    	} else {
		    resultado.push_back(buffer);
    	    buffer = "";
		}
	}
	if (buffer != "")
	{
    	resultado.push_back(buffer);
        buffer = "";
    }
	
    return resultado;
}

static int ResVelha(int v[][3]) {
    bool resolvido = false;
    int contX = 0;
    int contO = 0;
    // linhas
    for (int x = 0; x < 3; x++) {
        contX = 0;
        contO = 0;
        for (int y = 0; y < 3; y++) {
            if (v[x][y] == 1) {
                contX++;
            } else if (v[x][y] == -1) {
                contO++;
            }
        }
        if (contX == 3 || contO == 3) {
            resolvido = true;
            break;
        }
    }
    if (resolvido) {
        if (contX == 3) {
            return 1;
        } else {
            return -1;
        }
    }

    resolvido = false;
    // colunas
    for (int x = 0; x < 3; x++) {
        contX = 0;
        contO = 0;
        for (int y = 0; y < 3; y++) {
            if (v[y][x] == 1) {
                contX++;
            } else if (v[y][x] == -1) {
                contO++;
            }
        }
        if (contX == 3 || contO == 3) {
            resolvido = true;
            break;
        }
    }
    if (resolvido) {
        if (contX == 3) {
            return 1;
        } else {
            return -1;
        }
    }

    resolvido = false;
    contX = 0;
    contO = 0;
    // diagonal principal
    for (int x = 0; x < 3; x++) {
        if (v[x][x] == 1) {
            contX++;
        } else if (v[x][x] == -1) {
            contO++;
        }
        if (contX == 3 || contO == 3) {
            resolvido = true;
            break;
        }
    }
    if (resolvido) {
        if (contX == 3) {
            return 1;
        } else {
            return -1;
        }
    }

    resolvido = false;
    contX = 0;
    contO = 0;
    // diagonal secundaria
    for (int x = 0; x < 3; x++) {
        if (v[x][2 - x] == 1) {
            contX++;
        } else if (v[x][2 - x] == -1) {
            contO++;
        }
        if (contX == 3 || contO == 3) {
            resolvido = true;
            break;
        }
    }
    if (resolvido) {
        if (contX == 3) {
            return 1;
        } else {
            return -1;
        }
    }

    contX = 0;
    contO = 0;
    // empate
    for (int x = 0; x < 3; x++) {
        for (int y = 0; y < 3; y++) {
            if (v[x][y] == 1) {
                contX++;
            } else if (v[x][y] == -1) {
                contO++;
            }
        }
    }
    if (contX + contO == 9) {
        return 0;
    }
}

int main() {
    string linha;

    while (true)
    {
        getline(cin,linha);
        if(linha == "0")
        {
            break;
        }

        int l = 0;
   
        int v[3][3];

        vector<string> temp = split(linha,' ');
       
        for (int c = 0; c < 3; c++) {
            v[l][c] = atoi(temp[c].c_str());
        }

        l++;

        for (int x = 1; x < 3; x++) {
            getline(cin,linha);
            temp = split(linha,' ');
            for (int c = 0; c < 3; c++) {
                v[l][c] = atoi(temp[c].c_str());
            }
            l++;
        }
            
        int r = ResVelha(v);
            
        if(r==1){
            cout << "X\n";
        }else if(r==-1){
            cout << "O\n";
        }else{
            cout << "Empate\n";
        }
    }
    return 0;
}

