This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Е. Джобс
Уровень: Средний
Автомат обрабатывает натуральное число N > 1 по следующему алгоритму:
1. Строится двоичная запись числа N.
2. В записи последний ноль заменяется на первые две цифры в полученной записи.
3. Запись записывается справа налево (в обратную сторону).
4. Полученное двоичное число переводится в десятичную систему счисления.
Для какого максимального значения в результате работы алгоритма получится число 119?
Про возможность обрабатывать исключения try я писал в этом посте.
R = []
for n in range(2, 1000):
s = f'{n:b}'
try:
m = s.rindex('0')
s = s[:m] + s[:2] + s[m+1:]
s = s[::-1]
r = int(s, 2)
if r == 119:
R.append(n)
except Exception as E:
print(s, E)
print(max(R))
# Ответ: 58
R = []
Создаем пустой список R для хранения чисел, которые будут соответствовать заданным условиям.
for n in range(2, 1000):
Запускаем цикл, перебирающий числа от 2 до 999 включительно.
s = f'{n:b}'
Преобразуем текущее число n в строку, содержащую его двоичное представление.
try:
Начинаем блок try для обработки возможных исключений в последующем коде.
m = s.rindex('0')
Находим индекс последнего вхождения символа '0' в строке s.
s = s[:m] + s[:2] + s[m+1:]
Формируем новую строку: оставляем часть до последнего '0', вставляем первые два символа исходной строки и добавляем оставшуюся часть исходной строки после последнего '0'.
s = s[::-1]
Переворачиваем строку s задом наперед.
r = int(s, 2)
Преобразуем строку s обратно в целое число из двоичной системы счисления.
if r == 119:
Проверяем, равно ли получившееся число 119.
R.append(n)
Если условие верно, добавляем исходное число n в список R.
except Exception as E:
Обрабатываем возможные исключения, которые могут возникнуть в блоке try.
print(s, E)
В случае исключения выводим текущую строку s и описание ошибки E.
print(max(R))
Выводим максимальное число из списка R.
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Информатика ОГЭ | itpy 👨💻
Строки в Python – это один из самых важных типов данных. Они позволяют работать с текстовой информацией, и знание методов работы со строками существенно упростит решение задач на ЕГЭ.
Метод strip() удаляет пробелы (или другие символы) из начала и конца строки. Это полезно для очистки пользовательского ввода.
text = " Привет, мир! "
cleaned_text = text.strip()
print(cleaned_text) # "Привет, мир!"
Эти методы позволяют изменять регистр строки. lower() преобразует строку в нижний регистр, а upper() – в верхний.
text = "ПрIvEt"
print(text.lower()) # "привет"
print(text.upper()) # "ПРИВЕТ"
Метод replace(old, new, count) заменяет подстроку old на new в строке count раз.
text = "Я люблю Python!"
new_text = text.replace("Python", "программирование")
print(new_text) # "Я люблю программирование!"
Метод split(separator) разделяет строку на части по указанному разделителю. Если разделитель не указан, используется пробел.
text = "яблоко груша банан"
fruits = text.split() # по умолчанию разделяет по пробелам
print(fruits) # ['яблоко', 'груша', 'банан']
Метод join(iterable) соединяет элементы списка (или другого итерируемого объекта) в строку с указанным разделителем.
fruits = ['яблоко', 'груша', 'банан']
result = ', '.join(fruits)
print(result) # "яблоко, груша, банан"
Метод find(substring) ищет подстроку в строке и возвращает индекс, с которого начинается первая встреча. Если подстрока не найдена, возвращает -1.
text = "Привет, мир!"
index = text.find("мир")
print(index) # 8
Метод count(substring) возвращает количество вхождений подстроки в строку.
text = "яблоко, груша, яблоко"
count = text.count("яблоко")
print(count) # 2
Эти методы проверяют, начинается ли строка с указанной подстроки или заканчивается ли ею.
text = "Привет, мир!"
print(text.startswith("Привет")) # True
print(text.endswith("мир!")) # True
Практикуйтесь в использовании этих методов, чтобы запомнить синтаксис и логику работы с ними. Удачи в подготовке!
Информатика ЕГЭ | itpy 🧑💻
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Информатика ОГЭ | itpy 👨💻
В Python есть ряд встроенных функций, которые могут работать со строками и другими коллекциями. Эти функции помогут вам эффективно обрабатывать текстовую информацию. Давайте рассмотрим каждую из них с примерами.
Функция len() возвращает длину строки (количество символов в строке).
text = "Привет, мир!"
length = len(text)
print(length) # 13 (включая пробел и знак препинания)
Функции max() и min() ищут максимальный и минимальный элементы в последовательности. При работе со строками, они будут выдавать соответственно строку с максимальным или минимальным символом на основе их ASCII (или Unicode) значений.
text = "abcde"
max_char = max(text)
min_char = min(text)
print(max_char) # "e"
print(min_char) # "a"
Если строка состоит из символов, имеющих различный регистр, учтите, что символы в верхнем регистре имеют меньшие значения, чем в нижнем.
text = "Python"
max_char = max(text)
min_char = min(text)
print(max_char) # "y" (максимальный символ)
print(min_char) # "P" (минимальный символ)
Функция sorted() возвращает новый список, содержащий элементы исходного итерируемого объекта, отсортированные по возрастанию. При этом строки сортируются посимвольно.
text = "hello"
sorted_text = sorted(text)
print(sorted_text) # ['e', 'h', 'l', 'l', 'o']
Чтобы получить отсортированную строку, можно использовать метод join():
sorted_string = ''.join(sorted(text))
print(sorted_string) # "ehllo"
Функция set() создает множество, состоящее из уникальных элементов. При работе со строками это позволяет удалить дубликаты.
text = "hello world"
unique_chars = set(text)
print(unique_chars) # {'h', 'e', 'l', 'o', ' ', 'w', 'r', 'd'}
☝️Заметьте, что при использовании множества порядок символов не сохраняется, поскольку множества не имеют порядка.
Данные функции являются мощными инструментами в обработке строк в Python. Их понимание и умелое использование поможет вам эффективно решать задачи на экзаменах и в программировании в целом.
Информатика ЕГЭ | itpy
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Л. Шастин
Уровень: Средний
У исполнителя есть три команды, которым присвоены номера:
A. Прибавить 2
B. Прибавить 3
C. Умножить на 2
Сколько существует программ, для которых при исходном числе 3 результатом является число 20, а последняя в них команда - A или С?
В данной задачи для исследования порядка команд мы передаем строчный аргумент С, который принимает номера каждой новой команды. Таким образом мы можем проверить последнюю команду на условие.
def F(a,b, c: str):
if a >= b:
return a == b and c[-1] != 'B'
return F(a + 2, b, c + 'A') + F(a + 3, b, c + 'B') + F(a*2, b, c + 'C')
print(F(3,20,''))
# Ответ: 60
1️⃣
def F(a,b, c: str):
Объявление функции F с тремя параметрами: числовыми параметрами a, b и строковым параметром c
2️⃣
if a >= b:
Проверяем, если значение a больше или равно значению b
3️⃣
return a == b and c[-1] != 'B'
Возвращаем результат логического выражения, которое проверяет, что a равно b и последняя буква строки c не равна 'B'
4️⃣
return F(a + 2, b, c + 'A') + F(a + 3, b, c + 'B') + F(a*2, b, c + 'C')
В противном случае возвращаем сумму результатов рекурсивных вызовов функции F с измененными параметрами: добавляем к a значения 2, 3 и умножаем его на 2, а к строке c добавляем 'A', 'B' и 'C' соответственно
5️⃣
print(F(3,20,''))
Вызываем функцию F с начальными аргументами 3, 20 и пустой строкой, затем выводим результат вызова
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Л. Шастин, Вариант 7 (2024)
Уровень: Средний
Определите в прилагаемом файле максимальное количество идущих подряд символов, среди которых никакая гласная буква не стоит раньше согласной.
Примечание. Гласные буквы латинского алфавита: A, E, I, O, U, Y.
Аудио с пояснением к коду решения оставлю в комментариях.
s = open('24.txt').readline()
for x in 'AEIOUY':
s = s.replace(x, '* ')
print(max([len(x) for x in s.split()]))
# Ответ: 9052
1️⃣
s = open('24.txt').readline()
Считываем первую строку из файла '24.txt' и сохраняем ее в переменную s
2️⃣
for x in 'AEIOUY':
Начинаем цикл, который будет поочередно обрабатывать каждую букву из строки 'AEIOUY'
3️⃣
s = s.replace(x, '* ')
Заменяем каждую гласную букву x в строке s на комбинацию символов '* '
4️⃣
print(max([len(x) for x in s.split()]))
Разбиваем строку s по пробелам, находим длину каждого полученного фрагмента и выводим максимальную длину этих фрагментов
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: М. Ишимов
Уровень: Базовый
Сеть задана IP-адресом 119.124.96.0 и маской сети 255.255.240.0. Сколько в этой сети IP-адресов, двоичная запись которых оканчивается на 0?
from ipaddress import *
net = ip_network('119.124.96.0/255.255.240.0', 0)
cnt = 0
for ip in net:
s = f'{ip:b}'
# if s.endswith('0'):
if s[-1] == '0':
cnt += 1
print(cnt)
# Ответ: 2048
1️⃣
from ipaddress import *
Импортируем все классы и функции из модуля ipaddress, который обеспечивает удобную работу с IP-адресами и сетями
2️⃣
net = ip_network('119.124.96.0/255.255.240.0', 0)
Создаем объект сети net с заданным IP-адресом и маской подсети, указываем, что это IPv4 сеть с использованием маски в десятичном формате
3️⃣
cnt = 0
Инициализируем счетчик cnt, который будет хранить количество IP-адресов, удовлетворяющих определенному условию
4️⃣
for ip in net:
Начинаем цикл, который перебирает каждый IP-адрес в заданной сети net
5️⃣
s = f'{ip:b}'
Преобразуем текущий IP-адрес ip в двоичное строковое представление с помощью форматирования
6️⃣
# if s.endswith('0'):
Cтарая версию проверки, тоже работает.
7️⃣
if s[-1] == '0':
Проверяем, оканчивается ли двоичная строка s на '0', то есть является ли последний бит нулем
8️⃣
cnt += 1
Увеличиваем счетчик cnt на единицу, если последний бит IP-адреса равен нулю
9️⃣
print(cnt)
Выводим количество IP-адресов в сети net, у которых последний бит равен нулю
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Е.Джобс
Уровень: Средний
Автомат обрабатывает натуральное число N (0≤N≤255) по следующему алгоритму:
1) Строится восьми битная двоичная запись числа N.
2) Удаляются средние 4 цифры.
3) Полученное число переводится в десятичную запись и выводится на экран.
Какое наибольшее число, меньшее 110, после обработки автоматом даёт результат 7?
R = []
for n in range(0, 255+1):
s = f'{n:b}'.zfill(8)
s = s[:2] + s[-2:]
r = int(s, 2)
if n < 110 and r == 7:
R.append(n)
print(max(R))
# Ответ: 107
1️⃣
R = []
Создаем пустой список для хранения подходящих чисел
2️⃣
for n in range(0, 255+1):
Начинаем цикл, перебираем числа от 0 до 255 включительно
3️⃣
s = f'{n:b}'.zfill(8)
Переводим текущее число n в двоичную строку, дополняя нулями до 8 бит (в формате строки)
4️⃣
s = s[:2] + s[-2:]
Оставляем только первые две и последние две цифры двоичного представления
5️⃣
r = int(s, 2)
Преобразуем полученную строку обратно в целое число в десятичной системе счисления
6️⃣
if n < 110 and r == 7:
Проверяем, если число меньше 110 и преобразованное число равно 7
7️⃣
R.append(n)
Добавляем число в список R, если оно соответствует условиям
8️⃣
print(max(R))
Выводим наибольшее число из списка R
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
Стоит ли добавить разборы основных прототипов? Хотя они уже представлены в шпаргалках 🤔
Anonymous Poll
69%
Да, конечно надо
20%
Смысла нет, можно улучшать шпаргалки
12%
Нет, для меня не актуально
Forwarded from Информатика ОГЭ | itpy 👨💻
Множества — это неупорядоченные коллекции уникальных элементов. Они полезны для хранения элементов без дублирования и для выполнения операций над множествами, таких как объединение, пересечение и разность. Давайте рассмотрим основы множеств в Python.
# Создание пустого множества
my_set = set()
# Создание множества с элементами
my_set = {1, 2, 3, 4, 5}
# Пример множества со строками
fruits = {"apple", "banana", "cherry"}
# Добавление элемента в множество
my_set.add(6)
print(my_set) # {1, 2, 3, 4, 5, 6}
# Удаление элемента из множества
my_set.remove(3)
print(my_set) # {1, 2, 4, 5, 6}
# Проверка наличия элемента в множестве
print(4 in my_set) # True
print(10 in my_set) # False
Множества в Python — мощный инструмент для работы с уникальными данными и выполнения различных операций над ними.
Информатика ЕГЭ | itpy
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
Множества в Python поддерживают множество операций, таких как объединение, пересечение, разность и симметрическая разность. Давайте рассмотрим их подробнее.
Объединение возвращает множество, содержащее все элементы обоих множеств.
set1 = {1, 2, 3}
set2 = {3, 4, 5}
union_set = set1.union(set2)
print(union_set) # {1, 2, 3, 4, 5}
Пересечение возвращает множество, содержащее только общие элементы обоих множеств.
intersection_set = set1.intersection(set2)
print(intersection_set) # {3}
Разность возвращает множество, содержащее элементы, которые есть в первом множестве, но отсутствуют во втором.
difference_set = set1.difference(set2)
print(difference_set) # {1, 2}
Симметрическая разность возвращает множество, содержащее элементы, которые присутствуют в одном из множеств, но не в обоих.
symmetric_difference_set = set1.symmetric_difference(set2)
print(symmetric_difference_set) # {1, 2, 4, 5}
Эти операции помогают эффективно работать с множествами и управлять уникальными данными.
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
Таким образом можно найти подсказку, исправить опечатку в своем коде, или найти вдохновение в чужом решении, чтобы написать более оптимальный код
Я настоятельно призываю вас делиться своими вариантами решений, даже если в задаче просто просят "оставить ответ"
P.S. 26-27 номера скоро будут добавлены
Информатика ЕГЭ | itpy
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Пересдача 04.07.2024
Уровень: Базовый
Все пятибуквенные слова, в составе которых могут быть только русские буквы Л, А, Й, М, записаны в алфавитном порядке и пронумерованы начиная с 1.
Вот начало списка:
1. ААААА
2. ААААЙ
3. ААААЛ
4. ААААМ
5. АААЙА
Под каким номером в списке идёт последнее слово, которое не содержит ни одной буквы М, ни одной буквы Л и не содержит букв Й стоящих рядом?
Простейшую вариацию решения этого номера опубликую в комментариях к этому посту. Делитесь своими решениями!
from itertools import *
R = []
for num, p in enumerate(product(sorted('ЛАЙМ'), repeat=5), 1):
word = ''.join(p)
if 'М' not in word and 'Л' not in word:
if 'ЙЙ' not in word:
R.append(num)
print(max(R))
# Ответ: 274
from itertools import *
Импортируем все функции из модуля itertools для работы с итераторами.
R = []
Инициализируем пустой список R для хранения номеров подходящих комбинаций.
for num, p in enumerate(product(sorted('ЛАЙМ'), repeat=5), 1):
Используем product для генерации всех возможных комбинаций 5 букв из слова 'ЛАЙМ', сортируем буквы и пронумеровываем их с 1.
word = ''.join(p)
Объединяем кортеж p в строку для получения текущего слова.
if 'М' not in word and 'Л' not in word:
Проверяем, что буквы 'М' и 'Л' отсутствуют в текущем слове.
if 'ЙЙ' not in word:
Проверяем, что двойная буква 'ЙЙ' отсутствует в текущем слове.
R.append(num)
Если условия выполнены, добавляем номер комбинации в список R.
print(max(R))
Выводим максимальный номер из списка R, который соответствует самой последней подходящей комбинации.
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Резервный день 19.06.2024
Уровень: Базовый
Определите количество 15-ричных пятизначных чисел, в записи которых ровно одна цифра 8 и не менее двух цифр с числовым значением, превышающим 9.
В подобных задачах с цифрами обязательно необходимо добавлять проверку num[0] != '0', так как число не может начинаться с нуля.
from itertools import *
cnt = 0
for p in product('0123456789ABCDE', repeat=5):
num = ''.join(p)
if num[0] != '0' and num.count('8') == 1:
if len([x for x in num if int(x, 15) > 9]) >= 2:
cnt += 1
print(cnt)
# Ответ: 83175
from itertools import *
Импортируем все функции из модуля itertools для работы с итераторами.
cnt = 0
Инициализируем переменную счётчика cnt для подсчета подходящих комбинаций.
for p in product('0123456789ABCDE', repeat=5):
Используем функцию product для генерации всех возможных комбинаций длиной 5 из символов '0123456789ABCDE'.
num = ''.join(p)
Объединяем кортеж p в строку для получения текущего числа в виде строки.
if num[0] != '0' and num.count('8') == 1:
Проверяем, что первое число не равняется '0' и цифра '8' встречается в строке ровно один раз.
if len([x for x in num if int(x, 15) > 9]) >= 2:
Проверяем, что в числе присутствует как минимум две цифры, больше 9 в шестнадцатеричном представлении, то есть 'A', 'B', 'C', 'D', 'E'.
cnt += 1
Если все условия выполнены, увеличиваем счётчик cnt на 1.
print(cnt)
Выводим итоговое значение счётчика cnt, которое соответствует количеству подходящих комбинаций.
Наша Stepik подборкой задач
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Что покажет этот код?
Anonymous Quiz
50%
{1, 1.0, True}
20%
{1}
5%
{1, 1.0}
9%
{1, True}
5%
{}
11%
Произойдет ошибка
Please open Telegram to view this post
VIEW IN TELEGRAM
Что покажет приведенный код? 🤨
Anonymous Quiz
43%
{1: 'one', 1.0: 'two', True: 'three'}
19%
{1: 'one'}
5%
{True: 'three'}
7%
{1.0: 'two'}
12%
{1: 'three'}
14%
Произойдет ошибка
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Пересдача 04.07.2024
Уровень: Базовый
Определите количество строк таблицы, в которых сумма наибольшего и наименьшего чисел меньше суммы двух оставшихся.
Для решения этого номера кодом необходимо конвертировать .xls файл в .txt, но на экзамене будет доступен .csv формат, который можно будет открыть сразу же без конвертации.
cnt = 0
for s in open('9.txt'):
M = sorted([int(x) for x in s.split()])
# if M[0] + M[-1] < M[1] + M[2]:
# if max(M) + min(M) < sum(M) - max(M) - min(M):
if M[0] + M[-1] < M[1] + M[2]:
cnt += 1
print(cnt)
# Ответ: 9997
cnt = 0
Инициализируем переменную счётчика cnt для подсчета строк, которые удовлетворяют условию.
for s in open('9.txt'):
Открываем файл '9.txt' и построчно читаем его содержимое в цикле.
M = sorted([int(x) for x in s.split()])
Разбиваем строку s на отдельные элементы, приводим их к целым числам и сортируем их, результат сохраняем в список M.
if M[0] + M[-1] < M[1] + M[2]:
Проверяем условие: сумма первого и последнего элементов списка меньше суммы второго и третьего элементов.
cnt += 1
Если условие выполняется, увеличиваем счётчик cnt на 1.
print(cnt)
Выводим итоговое значение счётчика cnt, которое соответствует количеству строк, удовлетворяющих условию.
Информатика ЕГЭ | itpy
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Основная волна 07.06.2024
Уровень: Базовый
Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 100 идущих подряд
цифр 9?
ПОКА нашлось (33333) ИЛИ нашлось (999)
ЕСЛИ нашлось (33333)
ТО заменить (33333, 99)
ИНАЧЕ заменить (999, 3)
Задачи 12 номера можно назвать типовыми (не редкий случай для нашего экзамена), запомнить нужно только несколько основных вещей: 1) строка умноженная на число будет дублироваться 2) всегда пересоздаем строку s = s.replace() иначе строка не изменится 3) в методе .replace('a', 'b', 1) всегда ставим единичку - так как замены производятся последовательно.
s = '9' * 100
while '33333' in s or '999' in s:
if '33333' in s:
s = s.replace('33333', '99', 1)
else:
s = s.replace('999', '3', 1)
print(s)
# Ответ: 333
s = '9' * 100
Инициализируем строку s, состоящую из 100 символов '9'.
while '33333' in s or '999' in s:
Запускаем цикл, который будет продолжаться до тех пор, пока в строке s присутствует подстрока '33333' или '999'.
if '33333' in s:
Проверяем, присутствует ли в строке подстрока '33333'.
s = s.replace('33333', '99', 1)
Если '33333' присутствует, заменяем её на '99' (первая замена слева направо).
else:
Если подстроки '33333' нет в строке, выполняется следующий блок кода.
s = s.replace('999', '3', 1)
Если '999' присутствует, заменяем её на '3' (первая замена слева направо).
print(s)
Выводим итоговое значение строки s после завершения всех замен, когда условия больше не выполняются.
Информатика ЕГЭ | itpy
Наша Stepik подборкой задач
Please open Telegram to view this post
VIEW IN TELEGRAM
2 6 5 4
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Пресдача 04.07.2024
Уровень: Базовый
Сеть задана IP-адресом 115.192.0.0 и сетевой маской 255.192.0.0.
Сколько в этой сети IP-адресов, для которых количество единиц в двоичной записи IP-адреса не кратно 3?
Во всех ФИПИ вариантах/пробниках и на основном экзамене был представлен именно этот прототип, занятное наблюдение!
from ipaddress import *
net = ip_network('115.192.0.0/255.192.0.0', 0)
cnt = 0
for ip in net:
b_ip = f'{ip:b}'
if b_ip.count('1') % 3 != 0:
cnt += 1
print(cnt)
# Ответ: 2796202
1⃣
from ipaddress import *
Импортируем все функции из модуля ipaddress для работы с IP адресами и сетями.
net = ip_network('115.192.0.0/255.192.0.0', 0)
Создаём объект сети net, используя адрес сети '115.192.0.0' и маску подсети '255.192.0.0'. 0 указывает на IPv4-адрес.
cnt = 0
Инициализируем переменную счётчика cnt для подсчета IP-адресов, удовлетворяющих условию.
for ip in net:
Проходим в цикле по каждому IP-адресу в сети net.
b_ip = f'{ip:b}'
Преобразуем текущий IP-адрес в двоичное строковое представление и сохраняем его в переменную b_ip.
if b_ip.count('1') % 3 != 0:
Проверяем, что количество единиц в двоичном представлении IP-адреса не кратно 3.
cnt += 1
Если условие выполняется, увеличиваем счётчик cnt на 1.
print(cnt)
Выводим итоговое значение счётчика cnt, которое соответствует количеству подходящих IP-адресов.
Информатика ЕГЭ | itpy
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
3 5 5 5