def is_prime(n):
    if n < 2:
        return False
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            return False
    return True

def is_perfect(n):
    return sum(i for i in range(1, n) if n % i == 0) == n

def sum_of_digits(n):
    return sum(int(d) for d in str(abs(n)))

def reverse_number(n):
    sign = -1 if n < 0 else 1
    return sign * int(str(abs(n))[::-1])

def factorial_safe(n):
    if n > 100:
        return "Too big to calculate!"
    f = 1
    for i in range(1, n+1):
        f *= i
    return f

def magic_number_analyzer():
    print(" Welcome to the Magic Number Analyzer! ")
    while True:
        try:
            num_input = input("\nEnter an integer (or 'exit' to quit): ")
            if num_input.lower() == 'exit':
                print("Goodbye! Keep exploring numbers!")
                break
            n = int(num_input)
        except ValueError:
            print("Please enter a valid integer.")
            continue

        print(f"\nAnalyzing {n}...")
        print("- Prime? ", "Yes ✅" if is_prime(n) else "No ❌")
        print("- Perfect? ", "Yes ✅" if is_perfect(n) else "No ❌")
        print("- Factorial: ", factorial_safe(n))
        print("- Sum of digits: ", sum_of_digits(n))
        print("- Reverse of number: ", reverse_number(n))

if __name__ == "__main__":
    magic_number_analyzer()
