#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static int ResVelha(int v[][3]) {
    //bool resolvido = false;
    int resolvido = 0;
    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 = 1;
            break;
        }
    }
    if (resolvido == 1) {
        if (contX == 3) {
            return 1;
        } else {
            return -1;
        }
    }

    resolvido = 0;
    // 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 = 1;
            break;
        }
    }
    if (resolvido == 1) {
        if (contX == 3) {
            return 1;
        } else {
            return -1;
        }
    }

    resolvido = 0;
    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 = 1;
            break;
        }
    }
    if (resolvido == 1) {
        if (contX == 3) {
            return 1;
        } else {
            return -1;
        }
    }

    resolvido = 0;
    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 = 1;
            break;
        }
    }
    if (resolvido == 1) {
        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() {

    char linha[100000];

    while (1)
    {
        fgets(linha, 100000, stdin);
		linha[strlen(linha) - 1] = '\0';

        if (strcmp(linha, "0") == 0)
			break;
        
        int l = 0;
   
        int v[3][3];

        char * temp0 = strtok(linha, " ");
        char * temp1 = strtok(NULL, " ");
        char * temp2 = strtok(NULL, " ");
       
        for (int c = 0; c < 3; c++) {
            if(c==0)
            {
                v[l][c] = atoi(temp0);
            }
            if(c==1)
            {
                v[l][c] = atoi(temp1);
            }
            if(c==2)
            {
                v[l][c] = atoi(temp2);
            }
        }

        l++;

        for (int x = 1; x < 3; x++) {
            
            fgets(linha, 100000, stdin);
    		linha[strlen(linha) - 1] = '\0';

            temp0 = strtok(linha, " ");
            temp1 = strtok(NULL, " ");
            temp2 = strtok(NULL, " ");

            for (int c = 0; c < 3; c++) {
                if(c==0)
                {
                    v[l][c] = atoi(temp0);
                }
                if(c==1)
                {
                    v[l][c] = atoi(temp1);
                }
                if(c==2)
                {
                    v[l][c] = atoi(temp2);
                }
            }
            l++;
        }
            
        int r = ResVelha(v);
            
        if(r==1){
            printf("X\n");
        }else if(r==-1){
            printf("O\n");
        }else{
            printf("Empate\n");
        }
   
    } 
    return 0;
}