def print_board(board):
    print()
    for i in range(3):
        row = board[i*3:(i+1)*3]
        print(" | ".join(cell if cell != " " else str(i*3 + j + 1) 
                         for j, cell in enumerate(row)))
        if i < 2:
            print("--+---+--")
    print()

def check_winner(board):
    # All possible winning combinations (indices)
    win_combinations = [
        [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 combo in win_combinations:
        a, b, c = combo
        if board[a] == board[b] == board[c] and board[a] != " ":
            return board[a]
    
    return None

def is_draw(board):
    return all(cell != " " for cell in board)

def get_move(board, player):
    while True:
        move_input = input(f"Player {player}, enter your move (1-9): ").strip()
        
        # Check if input is numeric
        if not move_input.isdigit():
            print("Invalid input. Please enter a number between 1 and 9.")
            continue
        
        move = int(move_input)
        
        # Check if move is in valid range
        if move < 1 or move > 9:
            print("Move out of range. Please enter a number between 1 and 9.")
            continue
        
        # Check if cell is already occupied
        if board[move - 1] != " ":
            print("That cell is already occupied. Choose another cell.")
            continue
        
        return move - 1  # Convert to 0-based index

def main():
    # Initialize empty board
    board = [" "] * 9
    current_player = "X"
    
    print("Welcome to Tic-Tac-Toe!")
    print("Enter a number 1-9 to place your mark on the board:")
    print("1 | 2 | 3")
    print("--+---+--")
    print("4 | 5 | 6")
    print("--+---+--")
    print("7 | 8 | 9")
    print()
    
    while True:
        print_board(board)
        
        # Get valid move
        move = get_move(board, current_player)
        board[move] = current_player
        
        # Check for winner
        winner = check_winner(board)
        if winner:
            print_board(board)
            print(f"Player {winner} wins!")
            break
        
        # Check for draw
        if is_draw(board):
            print_board(board)
            print("It's a draw!")
            break
        
        # Switch player
        current_player = "O" if current_player == "X" else "X"

if __name__ == "__main__":
    main()
