# Python 3
# Введення: три рядки (A, B, C)
# Кожен рядок: або "a b c", або "abc" (без пробілів)
def read_set(prompt=""):
try:
s = input(prompt).strip()
except EOFError:
s = ""
if not s:
return set()
parts = s.split()
# якщо введено через пробіли — кожен токен є символом або набором символів
if len(parts) == 1:
token = parts[0]
# якщо це один символ або суцільний рядок, беремо кожен символ
if len(token) >= 1:
return set(ch for ch in token if ch != ' ')
else:
# багато частин — кожна частина може бути символом
result = set()
for p in parts:
for ch in p:
if ch != ' ':
result.add(ch)
return result
# Зчитуємо A, B, C
print("Введіть множину A (наприклад: a b c або abc):")
A = read_set()
print("Введіть множину B:")
B = read_set()
print("Введіть множину C:")
C = read_set()
# Обчислюємо перетин D
D = A.intersection(B, C)
# Виводимо елементи у впорядкованому вигляді (щоб результат був детерміністичним)
def print_set(name, s):
sorted_elems = sorted(s)
print(f"{name} = {{", end="")
print(", ".join(sorted_elems), end="")
print("}")
print_set("A", A)
print_set("B", B)
print_set("C", C)
print_set("D = A ∩ B ∩ C", D)
IyBQeXRob24gMwojINCS0LLQtdC00LXQvdC90Y86INGC0YDQuCDRgNGP0LTQutC4IChBLCBCLCBDKQojINCa0L7QttC10L0g0YDRj9C00L7Qujog0LDQsdC+ICJhIGIgYyIsINCw0LHQviAiYWJjIiAo0LHQtdC3INC/0YDQvtCx0ZbQu9GW0LIpCgpkZWYgcmVhZF9zZXQocHJvbXB0PSIiKToKICAgIHRyeToKICAgICAgICBzID0gaW5wdXQocHJvbXB0KS5zdHJpcCgpCiAgICBleGNlcHQgRU9GRXJyb3I6CiAgICAgICAgcyA9ICIiCiAgICBpZiBub3QgczoKICAgICAgICByZXR1cm4gc2V0KCkKICAgIHBhcnRzID0gcy5zcGxpdCgpCiAgICAjINGP0LrRidC+INCy0LLQtdC00LXQvdC+INGH0LXRgNC10Lcg0L/RgNC+0LHRltC70Lgg4oCUINC60L7QttC10L0g0YLQvtC60LXQvSDRlCDRgdC40LzQstC+0LvQvtC8INCw0LHQviDQvdCw0LHQvtGA0L7QvCDRgdC40LzQstC+0LvRltCyCiAgICBpZiBsZW4ocGFydHMpID09IDE6CiAgICAgICAgdG9rZW4gPSBwYXJ0c1swXQogICAgICAgICMg0Y/QutGJ0L4g0YbQtSDQvtC00LjQvSDRgdC40LzQstC+0Lsg0LDQsdC+INGB0YPRhtGW0LvRjNC90LjQuSDRgNGP0LTQvtC6LCDQsdC10YDQtdC80L4g0LrQvtC20LXQvSDRgdC40LzQstC+0LsKICAgICAgICBpZiBsZW4odG9rZW4pID49IDE6CiAgICAgICAgICAgIHJldHVybiBzZXQoY2ggZm9yIGNoIGluIHRva2VuIGlmIGNoICE9ICcgJykKICAgIGVsc2U6CiAgICAgICAgIyDQsdCw0LPQsNGC0L4g0YfQsNGB0YLQuNC9IOKAlCDQutC+0LbQvdCwINGH0LDRgdGC0LjQvdCwINC80L7QttC1INCx0YPRgtC4INGB0LjQvNCy0L7Qu9C+0LwKICAgICAgICByZXN1bHQgPSBzZXQoKQogICAgICAgIGZvciBwIGluIHBhcnRzOgogICAgICAgICAgICBmb3IgY2ggaW4gcDoKICAgICAgICAgICAgICAgIGlmIGNoICE9ICcgJzoKICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkKGNoKQogICAgICAgIHJldHVybiByZXN1bHQKCiMg0JfRh9C40YLRg9GU0LzQviBBLCBCLCBDCnByaW50KCLQktCy0LXQtNGW0YLRjCDQvNC90L7QttC40L3RgyBBICjQvdCw0L/RgNC40LrQu9Cw0LQ6IGEgYiBjINCw0LHQviBhYmMpOiIpCkEgPSByZWFkX3NldCgpCnByaW50KCLQktCy0LXQtNGW0YLRjCDQvNC90L7QttC40L3RgyBCOiIpCkIgPSByZWFkX3NldCgpCnByaW50KCLQktCy0LXQtNGW0YLRjCDQvNC90L7QttC40L3RgyBDOiIpCkMgPSByZWFkX3NldCgpCgojINCe0LHRh9C40YHQu9GO0ZTQvNC+INC/0LXRgNC10YLQuNC9IEQKRCA9IEEuaW50ZXJzZWN0aW9uKEIsIEMpCgojINCS0LjQstC+0LTQuNC80L4g0LXQu9C10LzQtdC90YLQuCDRgyDQstC/0L7RgNGP0LTQutC+0LLQsNC90L7QvNGDINCy0LjQs9C70Y/QtNGWICjRidC+0LEg0YDQtdC30YPQu9GM0YLQsNGCINCx0YPQsiDQtNC10YLQtdGA0LzRltC90ZbRgdGC0LjRh9C90LjQvCkKZGVmIHByaW50X3NldChuYW1lLCBzKToKICAgIHNvcnRlZF9lbGVtcyA9IHNvcnRlZChzKQogICAgcHJpbnQoZiJ7bmFtZX0gPSB7eyIsIGVuZD0iIikKICAgIHByaW50KCIsICIuam9pbihzb3J0ZWRfZWxlbXMpLCBlbmQ9IiIpCiAgICBwcmludCgifSIpCgpwcmludF9zZXQoIkEiLCBBKQpwcmludF9zZXQoIkIiLCBCKQpwcmludF9zZXQoIkMiLCBDKQpwcmludF9zZXQoIkQgPSBBIOKIqSBCIOKIqSBDIiwgRCkK