def print_board(board):
    for i in range(3):
        print(f" {board[i*3]} | {board[i*3+1]} | {board[i*3+2]} ")
        if i < 2:
            print("-----------")

def check_winner(board):
    lines = [
        [0, 1, 2], [3, 4, 5], [6, 7, 8],  # rows
        [0, 3, 6], [1, 4, 7], [2, 5, 8],  # columns
        [0, 4, 8], [2, 4, 6]              # diagonals
    ]
    for line in lines:
        a, b, c = line
        if board[a] == board[b] == board[c] and board[a] != " ":
            return board[a]
    if " " not in board:
        return "Draw"
    return None

def get_move(board, player):
    while True:
        try:
            move = int(input(f"Player {player}, enter your move (1-9): ")) - 1
            if move < 0 or move > 8:
                print("Move out of range. Try again.")
            elif board[move] != " ":
                print("Cell already occupied. Try again.")
            else:
                return move
        except ValueError:
            print("Invalid input. Enter a number 1-9.")

def main():
    board = [" "] * 9
    current_player = "X"
    while True:
        print_board(board)
        move = get_move(board, current_player)
        board[move] = current_player
        result = check_winner(board)
        if result:
            print_board(board)
            if result == "Draw":
                print("Game ended in a draw!")
            else:
                print(f"Player {result} wins!")
            break
        current_player = "O" if current_player == "X" else "X"

if __name__ == "__main__":
    main()
