import random
def wincheck(board):
        score = {
            "O": 1,
            "X": -1
        }
        for mark in ["O", "X"]:
            if ((board[0]==mark and board[1]== mark and board[2]==mark )or
                (board[3]==mark and board[4]==mark and board[5]==mark )or
                (board[6]==mark and board[7]==mark and board[8]==mark )or
                (board[0]==mark and board[3]==mark and board[6]== mark )or
                (board[1]==mark and board[4]==mark and board[7]==mark )or
                (board[2]==mark and board[5]==mark and board[8]==mark )or
                (board[0]==mark and board[4]==mark and board[8]==mark )or
                (board[2]==mark and board[4]==mark and board[6]==mark )):
                    return score[mark]
        if " " not in board:
            return 0
depth = [0]
def bestMove(board):
    if depth[0] == 1:
        return random.choice([i+1 for i in range(len(board)) if board[i] == " "])
    best = float("inf")
    move = 0
    if board.count(" ") in [8, 9] and board[4] == " ":
        return 5
    for i in range(len(board)):
        if board[i] == " ":
            board[i] = "X"
            Try = findBestMove(board, 1, depth[0])
            if Try < best:
                best = Try
                move = i
            board[i] = " "
    return move+1
def findBestMove(board, maximizing, depth):
    if wincheck(board) is not None:
        return wincheck(board)
    if depth > 0:
        depth -= 1
        if maximizing == 1:
            best = float("-inf")
            for i in range(len(board)):
                if board[i] == " ":
                    board[i] = "O"
                    Try = findBestMove(board, 0, depth)
                    board[i] = " "
                    best = max(best, Try)
            return best
        if maximizing == 0:
            best = float("inf")
            for i in range(len(board)):
                if board[i] == " ":
                    board[i] = "X"
                    Try = findBestMove(board, 1, depth)
                    board[i] = " "
                    best = min(best, Try)
            return best
    else:
        return 0
