Отличные новости: мы внесли изменения в систему навигации на нашем канале. Теперь каждая новая задача будет обозначаться уникальным хэштегом для вашего удобства. Вы можете сортировать задачи по номерам (типам) и по площадке публикации, например:
#reshu - Решу ЕГЭ,
#kege - kompege.ru,
#yandex - нейросеть Яндекса
#useful Просто воспользуйтесь функцией поиска на канале, чтобы легко найти интересующую вас статью или разбор задачи
Please open Telegram to view this post
VIEW IN TELEGRAM
Метод
.append()
используется для добавления элемента в конец списка. Пример: my_list = [1, 2, 3]
my_list.append(4)
print(my_list) # Вывод: [1, 2, 3, 4]
Можно реализовать через конкатенацию (склеивание) списков:
my_list = [1, 2, 3]
my_list += [4]
print(my_list) # Вывод: [1, 2, 3, 4]
Метод
.reverse()
изменяет порядок элементов в списке на обратный. Пример: my_list = [1, 2, 3, 4]
my_list.reverse()
print(my_list) # Вывод: [4, 3, 2, 1]
Можно записать по другому через срез:
my_list = [1, 2, 3, 4]
my_list = my_list[::-1]
print(my_list) # Вывод: [4, 3, 2, 1]
Метод
.count()
возвращает количество вхождений заданного элемента в список. Пример:my_list = [1, 2, 2, 3, 4, 2]
count_of_twos = my_list.count(2)
print(count_of_twos) # Вывод: 3
Метод .
remove()
удаляет первое вхождение указанного элемента из списка. Пример:my_list = [1, 2, 3, 2, 4]
my_list.remove(2) # первая найденная двойка
print(my_list) # Вывод: [1, 3, 2, 4]
Можно удалить элемент через его индекс используя
del
:my_list = [1, 2, 3, 2, 4]
del my_list[1] # индекс удаляемого элемента
print(my_list) # Вывод: [1, 3, 2, 4]
Метод
.index()
возвращает индекс первого вхождения заданного элемента в списке. Пример:my_list = [1, 2, 3, 2, 4]
index_of_two = my_list.index(2)
print(index_of_two) # Вывод: 1
Метод
.sort()
сортирует элементы списка по возрастанию (по умолчанию) или в обратном порядке, если передан аргумент reverse=True
. Пример:my_list = [4, 1, 3, 2]
my_list.sort()
print(my_list) # Вывод: [1, 2, 3, 4]
my_list.sort(reverse=True)
print(my_list) # Вывод: [4, 3, 2, 1]
Скажу честно я не любитель этого метода, считаю, что удобнее будет использовать функцию
sorted()
:my_list = [4, 1, 3, 2]
my_list = sorted(my_list)
print(my_list) # Вывод: [1, 2, 3, 4]
my_list = sorted(my_list, reverse=True)
print(my_list) # Вывод: [4, 3, 2, 1]
Информатика ЕГЭ | itpy
Please open Telegram to view this post
VIEW IN TELEGRAM
#kege #yandex
#reshu #statgrad
#polyakov
#ЕГЭ1 #ЕГЭ10 #ЕГЭ19
#ЕГЭ2 #ЕГЭ11 #ЕГЭ20
#ЕГЭ3 #ЕГЭ12 #ЕГЭ21
#ЕГЭ4 #ЕГЭ13 #ЕГЭ22
#ЕГЭ5 #ЕГЭ14 #ЕГЭ23
#ЕГЭ6 #ЕГЭ15 #ЕГЭ24
#ЕГЭ7 #ЕГЭ16 #ЕГЭ25
#ЕГЭ8 #ЕГЭ17 #ЕГЭ26
#ЕГЭ9 #ЕГЭ18 #ЕГЭ27
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
down()
опускает перо черепахи, позволяя ей рисовать на экране.import turtle as t
t.down()
t.forward(100)
t.done()
up()
поднимает перо черепахи, останавливая рисование.import turtle as t
t.down()
t.forward(100)
t.up()
t.forward(50)
t.done()
dot(size, color)
рисует точку заданного размера (size) и цвета (color) в текущей позиции черепахи.import turtle as t
t.dot(10, "red")
t.done()
screensize(width, height)
устанавливает размеры экрана в пикселях. Это определяет размер доступной области для рисования.import turtle as t
t.screensize(800, 600)
t.done()
tracer(n, delay)
управляет скоростью отрисовки черепахи. n задает количество шагов отрисовки, а delay - задержку между шагами.import turtle as t
t.tracer(3, 100)
t.done()
done()
ожидает закрытия окна черепахи перед окончанием программы.import turtle as t
t.done()
Эти функции помогают управлять рисованием и настройками экрана при работе с библиотекой Turtle в Python.
Информатика ЕГЭ | itpy
Please open Telegram to view this post
VIEW IN TELEGRAM
👏8 8 6
Пару слов об авторе канала, давайте знакомиться!
#kege #yandex
#reshu #statgrad
#polyakov
Информатика ЕГЭ | itpy
Программирование на Python | itpy
Информатика ОГЭ | itpy
Hey Student!
Please open Telegram to view this post
VIEW IN TELEGRAM
4 5 5 4❤2
Автор: Калинин А.
Уровень: Средний
Определите количество строк таблицы, для которых одновременно выполняются следующие условия:
1. Удвоенный квадрат минимального из чисел, содержащихся в строке, больше, чем произведение двух других чисел, ни одно из которых не равно максимальному числу
2. В строке содержится хотя бы два одинаковых числа
Особенное внимание уделите условию: "ни одно из которых не равно максимальному числу"
cnt = 0
for s in open('files/9.csv'):
M = sorted([int(x) for x in s.split(',')])
if len(set(M)) < 4:
if (2 * M[0] ** 2) > (M[1] * M[2]):
if M[1] != max(M) and M[2] != max(M):
print(M)
cnt += 1
print(cnt)
# Ответ: 43
cnt = 0
Инициализируем счётчик cnt, который будет хранить количество подходящих списков чисел.
for s in open('files/9.csv'):
Открываем файл '9.csv' для чтения и начинаем цикл по каждой строке файла.
M = sorted([int(x) for x in s.split(',')])
Разделяем строку s по запятым, преобразуем каждую часть в целое число и сортируем полученный список в M.
if len(set(M)) < 4:
Проверяем, содержит ли множество уникальных элементов списка M меньше 4 значений.
if (2 * M[0] ** 2) > (M[1] * M[2]):
Проверяем, выполняется ли неравенство: двойной квадрат первого элемента больше произведения второго и третьего элементов.
if M[1] != max(M) and M[2] != max(M):
Проверяем, не является ли максимальный элемент списка среди второго или третьего элементов.
print(M)
Если все условия выполнены, выводим список M.
cnt += 1
Увеличиваем счётчик cnt на 1, так как мы нашли подходящий список.
print(cnt)
По завершении цикла выводим общее количество подходящих списков, хранящихся в cnt.
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7 3❤🔥2 1
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Кабанов А
Уровень: Средний
Автомат обрабатывает натуральное число N (1≤N≤255) по следующему алгоритму:
1. Строится восьмибитная двоичная запись числа N.
2. Удаляются средние четыре цифры.
3. Полученное число переводится в десятичную запись и выводится на экран.
Каково наименьшее число, большее 130, которое после обработки автоматом даёт результат 10?
Интересная задачка из-за своего "прикольного" среза, ну и метод .zfill(8) не оставит равнодушными!)
for n in range(130+1, 255+1):
s = f'{n:b}'.zfill(8)
s = s[:2] + s[-2:]
r = int(s, 2)
if r == 10:
print(n)
break
# Ответ: 134
for n in range(130+1, 255+1):
- Начинаем цикл с числами от 131 до 255 (включительно).
s = f'{n:b}'.zfill(8)
- Преобразуем число n в двоичную строку и дополняем её нулями слева до 8 символов.
s = s[:2] + s[-2:]
- Извлекаем первые две и последние две цифры двоичной строки и объединяем их.
r = int(s, 2)
- Преобразуем получившуюся строку обратно в десятичное число.
if r == 10:
- Проверяем, равен ли результат 10.
print(n)
- Если условие выполнено, выводим значение n.
break
- Завершаем выполнение цикла после нахождения первого подходящего числа.
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥5 4 1
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Яндекс учебник
Уровень: Простая
Артём составляет пятибуквенные слова из букв своего имени. Он ввёл два правила: не повторять буквы в одном слове и не ставить гласные первыми и последними одновременно.
Сколько таких слов может составить Артём?
Обратите внимание на этот if, интересная штука и не самая очевидная.
from itertools import *
cnt = 0
for p in permutations('Артём'.upper()):
word = ''.join(p)
if not(word[0] in 'АЁ' and word[-1] in 'АЁ'):
cnt += 1
print(cnt)
# Ответ: 108
from itertools import *
- Импортируются все функции и классы из модуля itertools, который предоставляет инструменты для создания итераторов.
cnt = 0
- Инициализируется переменная cnt, которая будет использоваться для подсчета количества подходящих перестановок.
for p in permutations('Артём'.upper()):
- Запускается цикл for, который проходит по всем возможным перестановкам заглавных букв слова "Артём".
word = ''.join(p)
- Перестановка p преобразуется в строку и сохраняется в переменной word.
if not(word[0] in 'АЁ' and word[-1] in 'АЁ'):
- Проверяется, начинается ли слово с буквы из множества 'АЁ' и заканчивается ли также на букву из того же множества; если это не так, выполняется следующий шаг.
cnt += 1
- Увеличивается счетчик cnt на 1, если условие в предыдущей строке истинно.
print(cnt)
- Выводится общее количество перестановок, удовлетворяющих заданному условию.
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥9🔥4 3🤔1
Автор: Джобс Е.
Уровень: Средний
Катя составляет 5-буквенные слова из букв слова АПРЕЛЬ и упорядочивает их в обратном алфавитном порядке.
Вот начало списка:
1. ЬЬЬЬЬ
2. ЬЬЬЬР
3. ЬЬЬЬП
4. ЬЬЬЬЛ
5. ЬЬЬЬЕ
6. ЬЬЬЬА
7. ЬЬЬРЬ
Сколько слов, оканчивающихся на Ь, запишет Катя, если заполнит список до 387 позиции?
from itertools import *
n = 0
cnt = 0
for p in product(sorted('АПРЕЛЬ', reverse=True), repeat=5):
word = ''.join(p)
n += 1
if word[-1] == 'Ь':
cnt += 1
print(word)
if n >= 387:
break
print(cnt)
# Ответ: 65
from itertools import *
- Импортируются все функции и классы из модуля itertools, который предоставляет инструменты для создания итераторов.
n = 0
- Инициализируется переменная n для подсчета количества сгенерированных комбинаций.
cnt = 0
- Инициализируется переменная cnt для подсчета слов, заканчивающихся на букву 'Ь'.
for p in product(sorted('АПРЕЛЬ', reverse=True), repeat=5):
- Запускается цикл for, который создает все возможные кортежи длиной 5 из букв слова 'АПРЕЛЬ', отсортированных в обратном порядке.
word = ''.join(p)
- Кортеж p преобразуется в строку word.
n += 1
- Увеличивается счетчик n на 1, чтобы отслеживать количество проверенных слов.
if word[-1] == 'Ь':
- Проверяется, заканчивается ли слово word на букву 'Ь'.
cnt += 1
- Увеличивается счетчик cnt, если слово заканчивается на 'Ь'.
print(word)
- Выводится слово, если оно заканчивается на 'Ь'.
if n >= 387:
- Проверяется, достигло ли количество проверенных слов значения 387.
break
- Завершается цикл, если количество проверенных слов достигает 387.
print(cnt)
- Выводится общее число слов, заканчивающихся на 'Ь'.
Наша Stepik подборкой задач
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥9🔥3❤1🫡1 1
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Яндекс Учебник
Уровень: Средний
Определите количество пятизначных чисел в 14-ричной системе счисления, в записи которых цифры из набора ABCD не стоят рядом с нечётными цифрами из набора: 13579.
Обратите внимание! Что условия, которые требуют замены элементов строки через num = num.replace(x, 'A') необходимо ставить в самом конце программы! Чтобы не повредить все предыдущие условия задач подобного типа.
from itertools import *
cnt = 0
for p in product('0123456789ABCD', repeat=5):
num = ''.join(p)
if num[0] != '0':
for x in 'ABCD':
num = num.replace(x, 'A')
for x in '13579':
num = num.replace(x, '1')
if '1A' not in num and 'A1' not in num:
cnt += 1
print(cnt)
# Ответ: 217888
from itertools import *
Импортируем все функции из модуля itertools, который предоставляет различные функции для работы с итераторами.
cnt = 0
Инициализируем переменную cnt для подсчета количества допустимых комбинаций.
for p in product('0123456789ABCD', repeat=5):
Используем функцию product для генерации всех возможных комбинаций длиной 5 из символов '0123456789ABCD'.
num = ''.join(p)
Объединяем текущую комбинацию p в строку num.
if num[0] != '0':
Проверяем, чтобы первая цифра num не была '0', чтобы избежать некорректных чисел.
for x in 'ABCD':
Запускаем цикл, чтобы заменить все символы 'A', 'B', 'C' и 'D' на 'A'.
num = num.replace(x, 'A')
Заменяем текущий символ x на 'A' в строке num.
for x in '13579':
Запускаем цикл, чтобы заменить все нечетные цифры '1', '3', '5', '7' и '9' на '1'.
num = num.replace(x, '1')
Заменяем текущий символ x на '1' в строке num.
if '1A' not in num and 'A1' not in num:
Проверяем, чтобы строка num не содержала подстроки '1A' или 'A1'.
cnt += 1
Если предыдущая проверка прошла успешно, увеличиваем счетчик cnt на 1.
print(cnt)
Выводим значение cnt, что соответствует количеству допустимых комбинаций.
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥8👍3🔥3
Автор: Яндекс Учебник
Уровень: Средний
Определите количество пар элементов последовательности, сумма которых превосходит каждую из сумм соседних пар, при этом все три суммы являются положительными.
В ответе запишите количество найденных пар чисел, затем минимальное из произведений элементов таких пар.
В данной задаче под парой подразумевается два идущих подряд элемента последовательности. Под соседними парами подразумеваются четыре идущих подряд элемента последовательности.
Интересный пример, так как нам приходится рассматривать не только пару/тройку символов, как в основных задачах, но сразу 6-ку символов!
M = [int(s) for s in open('files/17.txt')]
R = []
for i in range(len(M)-5):
x, y, z, w, r, t = M[i:i+6]
if (z + w) > (x + y) and (z + w) > (r + t):
if z + w > 0 and x + y > 0 and r + t > 0:
R.append(z * w)
print(len(R), min(R))
# Ответ: 610 -123157359
M = [int(s) for s in open('files/17.txt')]
- Открывает файл 'files/17.txt', читает его и преобразует каждую строку в целое число, создавая список M.
R = []
- Создает пустой список R для хранения результатов, которые удовлетворяют условиям.
for i in range(len(M)-5):
- Запускает цикл по элементам списка M, при этом гарантируется, что для каждой итерации хватит шести элементов.
x, y, z, w, r, t = M[i:i+6]
- Извлекает шесть подряд идущих элементов из списка M, начиная с позиции i, и присваивает их переменным x, y, z, w, r и t.
if (z + w) > (x + y) and (z + w) > (r + t):
- Проверяет, что сумма z и w больше суммы x и y, а также больше суммы r и t.
if z + w > 0 and x + y > 0 and r + t > 0:
- Дополнительно проверяет, что каждая из сумм z + w, x + y и r + t больше нуля.
R.append(z * w)
- Если условия выполнены, добавляет произведение z и w в список R.
print(len(R), min(R))
- Выводит количество элементов в списке R и минимальное значение из этого списка.
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥8👍5🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Шастин Л
Уровень: Средний
Текстовый файл состоит из символов A, C, D, F и O.
Определите максимальное количество идущих подряд символов, среди которых не более 5 пар вида согласная + гласная в прилагаемом файле.
Чуть более сложная версия прошлой задачи.
s = open('0. files/24.txt').readline()
s = s.replace('C', 'D').replace('F', 'D')
s = s.replace('O', 'A')
s = s.split('DA')
maxi = 0
for i in range(len(s)-5):
r = 'A' + 'DA'.join(s[i:i+6]) + 'D'
maxi = max(maxi, len(r))
print(maxi)
Ответ: 27
s = open('24.txt').readline()
Открываем файл '0. files/24.txt' и читаем первую строку.
s = s.replace('C', 'D').replace('F', 'D')
Заменяем символы 'C' и 'F' на 'D' во всей строке.
s = s.replace('O', 'A')
Заменяем символ 'O' на 'A' во всей строке.
s = s.split('DA')
Разделяем строку на подстроки по разделителю 'DA' и сохраняем результат в список.
maxi = 0
Инициализируем переменную maxi для хранения максимальной длины найденной строки.
for i in range(len(s)-5):
Запускаем цикл по индексам списка s от 0 до длины списка минус 5.
r = 'A' + 'DA'.join(si:i+6) + 'D'
Формируем новую строку r, соединяя элементы списка s от текущего индекса i до i+5 с добавлением 'A' в начале и 'D' в конце.
maxi = max(maxi, len(r))
Обновляем значение maxi, если длина текущей строки r больше предыдущего значения maxi.
print(maxi)
Выводим максимальную длину строки, соответствующую условиям задачи.
Второй канал про теорию Python
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤🔥9 5 4 1
Автор: Рогов.А
Уровень: Сложный
В файле электронной таблицы в каждой строке содержатся шесть натуральных чисел. Определите количество строк таблицы, для которых выполнены оба условия:
в строке хотя бы одно число повторяется дважды (ровно 2 раза);
каждое из повторяющихся дважды (ровно 2 раза) чисел превышает каждое неповторяющееся.
Опасная задача потому что автор учитывает ситуацию, когда список uncopied пустой, что может вызывать ошибку при использовании функции max().
cnt = 0
for s in open('0. files/9.csv'):
M = sorted([int(x) for x in s.split(',')])
copied = [x for x in M if M.count(x) == 2]
uncopied = [x for x in M if M.count(x) == 1]
if len(copied) > 0:
if len(uncopied) == 0:
maxi = 0
else:
maxi = max(uncopied)
if min(copied) > maxi:
cnt += 1
print(cnt)
Ответ: 665
cnt = 0
- Создаём переменную-счётчик cnt и инициализируем её нулём.
- Будет хранить количество строк, удовлетворяющих условию.
for s in open('0. files/9.csv'):
- Открываем файл '0. files/9.csv' для чтения.
- Циклом for перебираем каждую строку s из файла.
M = sorted([int(x) for x in s.split(',')])
- Разбиваем строку s по запятым с помощью s.split(',').
- Каждый элемент преобразуем в целое число int(x).
- Полученный список чисел сортируем по возрастанию sorted().
- Результат сохраняем в переменную M.
copied = [x for x in M if M.count(x) == 2]
- Создаём список copied с помощью генератора списка.
- Включаем в него элементы x из M, которые встречаются ровно 2 раза (M.count(x) == 2).
- Это будут числа-дубликаты в текущей строке.
uncopied = [x for x in M if M.count(x) == 1]
- Аналогично создаём список uncopied.
- Включаем элементы, которые встречаются только 1 раз (M.count(x) == 1).
- Это уникальные числа в текущей строке.
if len(copied) > 0:
- Проверяем, есть ли в строке дубликаты (длина списка copied больше 0).
- Если нет, то пропускаем дальнейшие проверки для этой строки.
if len(uncopied) == 0:
- Проверяем, есть ли в строке уникальные числа.
- Если уникальных чисел нет (uncopied пуст):
maxi = 0
- Устанавливаем maxi (максимальное уникальное число) в 0,
- так как сравнивать будем с минимальным дубликатом.
else:
- Если в строке есть уникальные числа:
maxi = max(uncopied)
- Находим максимальное число среди уникальных и сохраняем в maxi.
if min(copied) > maxi:
- Проверяем условие: минимальное число из дубликатов больше maxi.
- Если условие выполняется:
cnt += 1
- Увеличиваем счётчик подходящих строк на 1.
print(cnt)
- После обработки всех строк выводим итоговое значение счётчика cnt.
Please open Telegram to view this post
VIEW IN TELEGRAM
2🔥7❤🔥4 4❤2
Автор: ФИПИ
Уровень: Средний
Откройте файл электронной таблицы, содержащей в каждой строке шесть натуральных чисел. Определите количество строк таблицы, содержащих числа, для которых выполнены оба условия:
в строке только одно число повторяется трижды, остальные числа различны;
утроенный квадрат повторяющегося числа строки больше суммы квадратов её неповторяющихся чисел.
cnt = 0
for s in open('0. files/9.csv'):
M = [int(x) for x in s.split(';')]
copied = [x for x in M if M.count(x) == 3]
uncopied = [x for x in M if M.count(x) == 1]
if len(copied) == 3 and len(uncopied) == 3:
if (copied[0] ** 2) * 3 > (sum([x**2 for x in uncopied])):
cnt += 1
print(cnt)
Ответ: 245
cnt = 0
# Инициализируем счетчик, который будет подсчитывать количество строк с нужными условиями
for s in open('0. files/9.csv'):
# Открываем файл и построчно считываем его содержимое в переменную s
M = [int(x) for x in s.split(';')]
# Разделяем строку по символу ';', преобразуем элементы в целые числа и создаем список M
copied = [x for x in M if M.count(x) == 3]
# Создаем список copied из элементов, которые встречаются в M ровно 3 раза (повторяющиеся элементы)
uncopied = [x for x in M if M.count(x) == 1]
# Создаем список uncopied из элементов, которые встречаются в M ровно 1 раз (уникальные элементы)
if len(copied) == 3 and len(uncopied) == 3:
# Проверяем, что у нас ровно 3 повторяющихся элемента и 3 уникальных элемента
if (copied[0] ** 2) * 3 > (sum([x**2 for x in uncopied])):
# Проверяем условие: квадрат первого повторяющегося элемента, умноженный на 3, больше суммы квадратов всех уникальных элементов
cnt += 1
# Если оба условия выполняются, увеличиваем счетчик на 1
print(cnt)
# Выводим итоговое значение счетчика
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🔥3👍2
Автор: Yandex учебник
Уровень: Базовый
Определите количество строк таблицы, для чисел которых выполнены оба условия:
- в строке есть ровно одно число, которое повторяется дважды, а остальные числа различны;
- максимальное число строки повторяется столько же раз, сколько и минимальное.
cnt = 0
for s in open('0. files/9.csv'):
M = [int(x) for x in s.split(';')]
copied2 = [x for x in M if M.count(x) == 2]
uncopied = [x for x in M if M.count(x) == 1]
if len(copied2) == 2 and len(uncopied) == 5:
if M.count(max(M)) == M.count(min(M)):
cnt += 1
print(cnt)
Ответ: 349
cnt = 0
Инициализируем счётчик, который будет считать строки, удовлетворяющие условиям задачи.
for s in open('0. files/9.csv'):
Построчно читаем файл '0. files/9.csv'; каждая строка — это строка s.
M = [int(x) for x in s.split(';')]
Преобразуем строку в список целых чисел, разделяя элементы по символу ';'.
copied2 = [x for x in M if M.count(x) == 2]
Создаём список чисел, которые встречаются ровно дважды.
uncopied = [x for x in M if M.count(x) == 1]
Создаём список чисел, которые встречаются только один раз.
if len(copied2) == 2 and len(uncopied) == 5:
Проверяем, что два различных числа встречаются по два раза, а пять других — по одному разу.
if M.count(max(M)) == M.count(min(M)):
Проверяем, что максимальное и минимальное значения в строке встречаются одинаковое количество раз.
cnt += 1
Если оба условия выполнены, увеличиваем счётчик подходящих строк на 1.
print(cnt)
Выводим количество строк, удовлетворяющих условиям задачи.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥5🔥4❤1