def is_valid_binary(s: str) -> bool:
    """ يتحقق مما إذا كانت السلسلة ثنائية صحيحة بدون أصفار بادئة """
    return s == "0" or (s.isdigit() and set(s) <= {"0", "1"} and s[0] != "0")

def add_binary(a: str, b: str) -> str:
    result = []
    carry = 0

    # جعل الأطوال متساوية بإضافة أصفار للبداية
    max_len = max(len(a), len(b))
    a, b = a.zfill(max_len), b.zfill(max_len)

    # البدء من آخر خانة (الجهة اليمنى)
    for i in range(max_len - 1, -1, -1):
        bit_sum = carry + int(a[i]) + int(b[i])
        result.append(str(bit_sum % 2))  # إضافة ناتج الجمع إلى النتيجة
        carry = bit_sum // 2  # تحديث الحمل (carry)

    # إضافة الحمل المتبقي إن وجد
    if carry:
        result.append('1')

    # عكس النتيجة وإعادتها كسلسلة نصية
    return ''.join(result[::-1])

# تشغيل البرنامج في حلقة حتى يختار المستخدم الخروج
while True:
    print("\nأدخل رقمين ثنائيين بدون أصفار بادئة (أو اكتب 'خروج' لإنهاء البرنامج):")

    a = input("أدخل الرقم الثنائي الأول: ")
    if a.lower() == 'خروج':
        break
    while not is_valid_binary(a):  # التحقق من صحة الإدخال
        print("⚠️ إدخال غير صالح! يجب أن يكون الرقم ثنائيًا ولا يحتوي على أصفار بادئة.")
        a = input("أدخل الرقم الثنائي الأول مجددًا: ")

    b = input("أدخل الرقم الثنائي الثاني: ")
    if b.lower() == 'خروج':
        break
    while not is_valid_binary(b):  # التحقق من صحة الإدخال
        print("⚠️ إدخال غير صالح! يجب أن يكون الرقم ثنائيًا ولا يحتوي على أصفار بادئة.")
        b = input("أدخل الرقم الثنائي الثاني مجددًا: ")

    print("✅ المجموع الثنائي:", add_binary(a, b))
