import random

def main():

    # Set game parameters
    min_range = 1
    max_range = 100
    num_guesses = 10

    # Generate random number
    secret_number = random.randint(min_range, max_range)

    # Welcome message
    print("Welcome to the Number Guessing Game!")

    # Start the game
    while num_guesses > 0:
        # Get user guess
        try:
            guess = int(input(f"Enter your guess (between {min_range} and {max_range}): "))
        except ValueError:
            print("Invalid input. Please enter a number.")
            continue

        # Check if the guess is within range
        if not min_range <= guess <= max_range:
            print(f"Guess out of range. Please enter a number between {min_range} and {max_range}.")
            continue

        # Check if the guess is correct
        if guess == secret_number:
            print(">> Congratulations! It is correct guesse << (:")
            break
        elif guess < secret_number:
            print("** It is too low ** ): ")
        else:
            print("** It is too high ** ): ")

        # Print remaining guesses
        num_guesses -= 1
        print(f"You have {num_guesses} guesses remaining.")

    # Game over message
    if num_guesses == 0:
        print(f"Sorry, you ran out of guesses! The number was {secret_number}.")

    # Ask to play again
    play_again = input("Do you want to play again? (y/n): ").lower()
    if play_again == "y":
        main()
    else:
        print("Thanks for playing!")

# Run the game
if __name__ == "__main__":
    main()