



def cria_tabuleiro(m,n):
  T = [ None ]*m
  for i in range(m):
    T[i] = [ " " ]*n
  return T

def mostra_tabuleiro(T,m,n):
  # Pula uma linha:
  print("") 
  # Imprime os números das colunas:
  print("  ", end = "")
  for j in range(n):
    print(j, end="")
  print("")
  # Imprime as linhas:
  for i in range(m):
    # Imprime o número da linha.
    print(i, end="")
    print(" ", end="");
    # Imprime as casas da linha.
    for j in range(n):
      print(T[i][j], end="");
    print("")
  print("")

def recebe_jogada(T,m,n):
  print("Sua vez:")
  while True:
    i = int(input(""))
    j = int(input(""))
    if (i >= 0) and (i < m) and (j >= 0) and (j < n) and T[i][j] == " ":
      break
    print("escolha invalida, tente de novo")
  return (i, j)
  
def jogador_ganhou(T,m,n, c):
  return False
  
def tabuleiro_cheio(T,m,n):
  for i in range(m):
    for j in range(n):
      if T[i][j] == " ":
        return False
  return True
  
def escolhe_casa_vazia(T,m,n):
  for i in range(m):
    for j in range(n):
      if T[i][j] == " ":
        return (i,j)
  assert False # Nao deve nunca chegar aqui.

def joga_partida(m,n):
  T = cria_tabuleiro(m,n)
  while True:
    mostra_tabuleiro(T,m,n)
    acabou = jogada_do_usuario(T,m,n)
    if acabou:
      break
    acabou = jogada_do_computador(T,m,n)
    if acabou:
      break
      
def jogada_do_usuario(T,m,n):     
  (i,j) = recebe_jogada(T,m,n)
  T[i][j] = "X"
  if jogador_ganhou(T,m,n, "X"):
    mostra_tabuleiro(T,m,n)
    print("Parabens, voce ganhou!")
    return True
  if tabuleiro_cheio(T,m,n):
    mostra_tabuleiro(T,m,n)
    print("Empatou...")
    return True
  return False
  
def jogada_do_computador(T,m,n): 
  (i,j) = escolhe_casa_vazia(T,m,n)
  T[i][j] = "O"
  if jogador_ganhou(T,m,n, "O"):
    mostra_tabuleiro(T,m,n)
    print("Ganhei, ha ha ha!")
    return True
  if tabuleiro_cheio(T,m,n):
    mostra_tabuleiro(T,m,n)
    print("Empatou...")
    return True
  return False

print("Jogo da Velha")
while True:
  (m,n) = aceita_tamanho()
  if m == 0:
    break
  joga_partida(m,n)
 
