Плюсануть
Поделиться
Класснуть
Запинить


Условие задачи ПрогрессПопытки, все/успешные
ID 68143. Сортируем словарь (C++)
Темы: Словари   

Алфавитно-частотный словарь - это частотный словарь, в котором слова с указанием их частоты (встречаемости) расположены по алфавиту.
Постройте словарь, отсортированный по частоте слов, в котором слова расположены порядке уменьшения их частоты встречаемости, справа от каждого слова должно быть указано сколько раз оно встречается в тексте. Если количество слов одинаково, сортировка идет по словам в лексикографическом порядке.  Признаком окончания текста является "END!". 

Входные данные
На вход подаются строки текста. Последняя строка содержит одно единственное слово "END!" и является признаком окончания текста.

Выходные данные
Выведите на экран все слова, с указанием через пробел того, сколько раз это слово встречается в тексте. Каждое слово в отдельной строке. Слова должны быть расположены в порядке уменьшения частоты встречаемости.

 

Примеры
Входные данные Выходные данные
1 один два
три один
два
END!
два 2
один 2
три 1

8/ 3
ID 66401. 66401
Темы: Словари   

Группа молодых энтузиастов "МэК" захотели посчитать сколько сантиметров проходит палец сотрудника колл-центра, когда тот набирает номер телефона клиента на циферблате. Для начального варианта программы достаточно считать сколько палец прошёл в одном из направлений, по горизонтали или по вертикали. Расстояние между центрами всех кнопок равно 1, считается, что всегда нажимается центр кнопки.
Расстояние кнопок по диагонали (45 градусов), например между "1" и "5" равно 1.4. Расстояние между Кнопками под 30 градусов, например между "1" и "6" равно 2,2. Расстояние между "1" и "0", а также между "3" и "0" равно 3.1. Начальная позиция пальца оператора всегда на той цифра с которой начинается номер телефона.

Формат входных данных
На вход программы поступает номер телефона, содержащий от 2 до 20 цифр. Также направления: 0 - горизонталь, 1 - вертикаль.
Формат выходных данных
На выходе программа выдаёт число, равное пройденному расстоянию. Например: номер телефона 8965, считаем горизонталь. Из 8 в 9 +1, из 9 в 6 нет движения по горизонтали, из 6 в 5 +1. Общее пройденное расстояние равно 2.
Циферблат:
123
456
789
0

1/ 1
ID 65812. 65812
Темы: Словари   

Ваня очень дружелюбный мальчик, поэтому у него очень много друзей. Ваня рад этому, но вот делиться, если он что-то купил, приходится со всеми. Потому Ваня придумал очень гениальный план. Когда его спрашивают, что он купил, при выходе с магазина, он хочет называть только те продукты, которыми ему не жалко поделиться.
Продукты, которыми не жалко поделиться, это продукты, которых Ваня купил минимум K//2 (целочисленное деление K на 2), где K – количество друзей, которые встретили Ваню у магазина.
Определите, какими продуктами Ваня поделится в этот раз с ребятами.

Формат входных данных
На вход в программу на первой строке подаётся K – количество друзей, которые встречают Ваню у магазина (1 <= K <= 10000).
На второй строке подаётся N (1 <= N <= 1000000) – количество продуктов, которые купил Ваня.
Далее, на N строках указаны названия продуктов (одно слово английскими буквами), купленных Ваней, притом продукты, которые были куплены более чем в количестве 1 штуки, идут подряд. Если Ваня купил Apple 3 штуки, то Apple будут идти подряд. Но продукты не отсортированы по алфавиту!

Формат выходных данных
На выходе необходимо вывести в отсортированном по алфавиту порядке названия всех продуктов (каждое название на новой строке), которыми поделится Ваня. Если Ваня не поделится с ребятами продуктами, то вывести «NO» заглавными буквами.

279/ 95
ID 56516. Сортируем словарь (Python)
Темы: Словари   

Алфавитно-частотный словарь - это частотный словарь, в котором слова с указанием их частоты (встречаемости) расположены по алфавиту.
Постройте словарь, отсортированный по частоте слов, в котором слова расположены порядке уменьшения их частоты встречаемости, справа от каждого слова должно быть указано сколько раз оно встречается в тексте. Если количество слов одинаково, сортировка идет по словам в лексикографическом порядке.  Признаком окончания текста является "END!". 

Входные данные
На вход подаются строки текста. Последняя строка содержит одно единственное слово "END!" и является признаком окончания текста.

Выходные данные
Выведите на экран все слова, с указанием через пробел того, сколько раз это слово встречается в тексте. Каждое слово в отдельной строке. Слова должны быть расположены в порядке уменьшения частоты встречаемости.

 

Примеры
Входные данные Выходные данные
1 один два
три один
два
END!
два 2
один 2
три 1

1254/ 390
ID 50778. Подсчет пар
Темы: Сортировка подсчетом    Словари   

Вам дан массив A из N чисел. Найдите количество различных пар (i, j), таких, что j>=i и A[i] = A[j].

Формат входных данных
Первая строка входных данных содержит количество тестовых случаев T. Каждый тестовый случай состоит из двух строк, первая строка - число N, за ней следует строка, состоящая из N целых чисел, которые являются элементами массива A.

Ограничения
1 <= T <= 10
1 <= N <= 106 
-106 <= A[i] <= 106
0 <= i < N


Формат выходных данных
Для каждого тестового случая выведите количество различных пар.
 

139/ 51
ID 50553. Словарь
Темы: Обработка текста    Алгоритмы поиска    Словари   

Однажды, разбирая старые книги на чердаке, школьник Вася нашёл англо-латинский словарь. Английский он к тому времени знал в совершенстве, и его мечтой было изучить латынь. Поэтому попавшийся словарь был как раз кстати.

К сожалению, для полноценного изучения языка недостаточно только одного словаря: кроме англо-латинского необходим латинско-английский. За неимением лучшего он решил сделать второй словарь из первого.

Как известно, словарь состоит из переводимых слов, к каждому из которых приводится несколько слов-переводов. Для каждого латинского слова, встречающегося где-либо в словаре, Вася предлагает найти все его переводы (то есть все английские слова, для которых наше латинское встречалось в его списке переводов), и считать их и только их переводами этого латинского слова.

Помогите Васе выполнить работу по созданию латинско-английского словаря из англо-латинского.

Формат входных данных
В первой строке содержится единственное целое число \(N\) (\(1 \le N \le 100\)) — количество английских слов в словаре. Далее следует \(N\) описаний. В первой строке каждого описания содержится английское слово. В следующей строке записано единственное число \(K \ge 1\) — количество переводов. В следующих \(K\) строках приведены переводы текущего английского слова на латинский, по одному в каждой строке.

Все слова состоят только из маленьких латинских букв. Общее количество слов на входе не превышает \(100\). Длина каждого слова не превосходит 15 символов.

Формат выходных данных
Выведите соответствующий данному латинско-английский словарь в следующем формате. В первую строку запишите единственное целое число \(N\) — количество латинских слов в словаре. Далее выведите \(N\) описаний, каждое описание в отдельной строке: сначала латинское слово, затем отделённый пробелами дефис (символ номер 45), затем разделённые запятыми с пробелами переводы этого латинского слова на английский.

При этом порядок английских слов внутри перевода одного латинского может быть каким угодно. Кроме того, порядок следования латинских слов для перевода в словаре также не важен.

6/ 4
ID 50099. 50099
Темы: Словари   

Формальной верификацией (проверкой) называется математическое доказательство соответствия или несоответствие предмета верификации его формальному описанию.
Известно, что целочисленная переменная обычно занимает ячейку памяти фиксированного размера, а значит, имеет заранее предопределённый, установленный её типом данных, диапазон допустимых значений, выход за пределы которого приведёт к переполнению.
В рамках данной задачи требуется определить, какие значения могут принимать переменные некоторой программы, чтобы в процессе её работы не произошло ни одного переполнения.

Входные данные
В первой строке натуральное число N, не превышающее 10, - количество переменных. Далее N строк, в которых через пробел записано имя переменной в виде одной заглавной латинской буквы, и два целых числа (по модулю не превышают 106) - минимальное и
максимальное значения, которые определяются её типом данных. Затем в следующей строке записано натуральное число M, не превышающее 100 - количество операций над переменными.
Далее в M строках записаны выражения вида A = B + K, где A и B - имена переменных, а K - число, не превышающее по модулю 106. Допустимы две операции: сложение и вычитание.

Выходные данные
Вывести N строк, где для каждой переменной через пробел указать её имя и диапазоны значений, которые могут быть ей присвоены перед первой операцией присваивания, чтобы гарантированно не произошло ни одного переполнения. Переменные вывести в
соответствии с алфавитным порядком их имён.
 

12/ 4
ID 47190. Строка по шаблону
Темы: Словари   

Магистр Аркадий любит работать со строками и создавать для них шаблоны. Сейчас у Аркадия есть строка-шаблон и строка s. Аркадий хочет, чтобы вы определили подходит ли данная строка-шаблон для строки s.

Строка-шаблон подходит для строки s, если существует взаимно однозначное соответствие между буквой в шаблоне и непустым словом в s.

Входные данные
Программа получает на вход две строки: строку-шаблон и строка s.

Выходные данные
Выведите YES, если строка-шаблон  подходит для строки s, и NO в противном случае.
 
 

Примеры
Входные данные Выходные данные
1
abba
dog cat cat dog
YES
2
abba
dog cat cat fish
NO

83/ 38
ID 47187. Волшебные строки
Темы: Словари   

Магистр Аркадий очень любит работать со строками и превращать одни строки в другие. Он считает, что две строки s и t являются "магическими", если символы в можно заменить таким образом, чтобы получилась строка t. При этом, все вхождения символа заменяются на другой символ с сохранением порядка следования символов. НО, никакие два символа не могут быть заменены на один и тот же символ. Однако символ может быть заменен на самого себя.

Входные данные
Программа получает на вход две строки s и t.

Ограничения

  • 1 <= Длина строки s <= 5 * 104
  • Длина строки s = Длина строки t
  • s и t состоят из любых допустимых ASCII символов



Выходные данные
Выведите YES, если данные строки "магические" и NO в противном случае. Вы можете можете выводить ответ в любом регистре.
 

Примеры
Входные данные Выходные данные
1
egg
add
YES
1
foo
bar
NO

113/ 15
ID 46944. Триспектакулярные числа
Темы: Словари   

Триспектакулярные числа - это числа, которые встречаются в каком-либо наборе чисел более чем в  ⌊n/3⌋ число раз. В заданном наборе из n чисел, найдите все триспектакулярные числа этого набора.

Входные данные
Первая строка содержит натуральное число n - количество чисел в наборе. Вторая строка содержит n чисел ai, разделенных одним пробелом. 
 

Ограничения

  • 1 <= n <= 5 * 104
  • -109 <= a[i] <= 109

Выходные данные
Выведите в одну строку, через один пробел, все триспектакулярные числа из заданного набора в порядке возрастания.
 
 
Примеры
Входные данные Выходные данные
1 3
3 2 3
3
2 2
1 2
1 2

8/ 3
ID 46411. Наиболее часто встречающееся слово
Темы: Словари   

Вы дали строку, содержащая некоторый текст. Вас просят определить наиболее часто встречающееся слово в данной строке. При этом запрещается считать слова, которые являются запрещенными. 
Гарантируется, что есть хотя бы одно слово, которое не запрещено, и что ответ уникален.

Входные данные
Первая строка содержит исходный текст. Вторая строка содержит одно число - количество запрещенных слов. Треться строка содержит список запрещенных слов, разделенных одним пробелом.
 

Ограничения

  • 1 <= длина текста <= 1000
  • текст состоит из английских букв, разделителем слов является знак пробела (' '), и/или один из следующих символов: "!?',;.".
  • 0 <= количество запрещенных слов <= 100
  • 1 <= длина каждого запрещенного слова <= 10
  • запрещенное слово состоит только из английских букв, записанных в нижнем регистре.

Выходные данные
 Выведите в нижнем регистре наиболее часто встречаемое слово.
 
 
Примеры
Входные данные Выходные данные
1
Alpha Beta alpha Z z, b.
1
alpha
z
2
a.
0
a

57/ 9
ID 45254. Объединение подобных элементов
Темы: Словари   

Дан двумерный массив целых чисел, items1 и items2, представляющие собой два множества элементов. Каждый из данных массивов обладает следующими свойствами:

  • items[i] = [valuei, weighti], где valuei обозначает значение, а weighti обозначает вес  iго элемента;
  • значение каждого элемента уникально.

Верните двумерный массив ret, где ret[i] = [valuei, weighti], в котором weighti является суммой весов всех значений valuei.
Массив ret должен быть отсортирован по возрастанию по значению value.



Входные данные
Программа получает на вход в первой строке целое число n1 - количество элементов в массиве items1. Далее следуют n1 строк, в каждой из которых записаны два целых числа valuei, weight- элементы первого массива и их веса.
В следующей строке записано целое число n2 - количество элементов в массиве items2. Далее следуют n2 строк, в каждой из которых записаны два целых числа valuei, weight- элементы второго массива и их веса.

Ограничения на входные данные:
  • 1 <= n1, n2 <= 1000
  • items1[i].len() == items2[i].len() == 2
  • 1 <= valuei, weighti <= 1000
  • Каждое значение valuei в items1 уникально.
  • Каждое значение valuei в items2 уникально.

Выходные данные
Выведите массив ret в требуемом формате (см. пример)
 
 
Примеры
Входные данные Выходные данные
1
3
1 1
4 5
3 8
2
3 1
1 5
[[1, 6], [3, 9], [4, 5]]
2
3
1 1
3 2
2 3
3
2 1
3 2
1 3
[[1, 4], [2, 4], [3, 4]]

64/ 37
ID 38835. 3 коровы
Темы: Словари   

Склиссы — "сумчатые парнокопытные" в виде коровы с перепончатыми крыльями с планеты Шешинеру. Несмотря на способность летать, склисс, как и любая земная корова, достаточно ленива и тугодумна (почитайте побольше про склиссов ). 
Профессор Игорь Селезнев взял на борт трех склиссов для изучения: Бесси (Bessie), Элси (Elsie) и Милдред (Mildred), каждая из которых изначально дает 7 галлонов молока в день. Поскольку известно, что надой склисса со временем может измениться, профессор Селезнев проводит периодические измерения в течение следующих 100 дней и записывает их в журнал. Записи в его журнале выглядят так:

35 Bessie -2
14 Mildred +3


Первая запись указывает на то, что на 35-й день надой Бесси был на 2 галлона ниже, чем при последнем измерении. Следующая запись указывает, что на 14-й день надой молока у Милдред увеличился на 3 галлона по сравнению с тем, когда он был измерен в последний раз.
Профессор Селезнев занят во многих исследованиях, поэтому он может сделать не более одного измерения в день. К сожалению, он не всегда успевает сразу записать все в журнал и, поэтому его измерения могут идти не в хронологическом порядке.

Чтобы поддерживать мотивацию склиссов, Игорь Селезнев с гордостью вывешивает на стене организованной фермы фотографию склисса с самым высоким надоем молока (если таких склиссов несколько, то он вывешивает все их фотографии).
Определите количество дней, в течение которых профессору Игорю Селезневу нужно было бы менять фотографию.

Входные данные
Первая строка ввода содержит N, количество измерений, которые сделал профессор. Каждая из последуюших N строк описывает одно измерение, в формате, описанном выше: день (целое число от 1 до 100), имя склисса, и изменение производительности (ненулевое целое число). Количество молока, которое даёт любой склисс, всегда будет в интервале 0..1000.

Выходные данные
Выведите е количество дней, в течение которых профессору Игорю Селезневу нужно было бы менять фотографию.
 

Примеры
Входные данные Выходные данные Пояснение
1
4
7 Mildred +3
4 Elsie -1
9 Mildred -1
1 Bessie +2
3
Иначально все склиссы дают по 7. В день 1 производительность Бесси вырастет до 9, делая её единственной победительницей и вынуждающей профессора сменить фотографию. В день 4 производительность Элси уменьшится до 6, но это не изменит того факта, что лидером останется Бэсси. В день 7 Милдред выйдет в лидеры, в день 8 Милдред сравняется с Бесси, что опять приведёт к смене карточек.

141/ 44
ID 38791. Подматрица - 1
Темы: Словари   

У Фили есть квадратная матрица A размера N×N, но она кажется ему слишком большой. Ему гораздо больше нравятся матрицы размера k×k (k<N).
Филя хочет получить матрицу нужного размера взяв некоторую подматрицу исходной матрицы.
Подматрицей k×k матрицы A в данном случае Филя считает матрицу B такую, что bi,j=ai+x,j+y, для всех i, j от 1 до k. Из данного определения можно заметить, что подматрица исходной матрицы задается парой чисел (x, y).
Для того, чтобы выбрать наиболее интересную для себя подматрицу, Филя хочет узнать, сколько есть способов выбрать из исходной матрицы две различные (характеризующие пары (x, y) отличаются хотя бы в одной позиции) равные подматрицы k×k. Две матрицы Q и P размера k×k считаются равными, если для любых i,j:1≤i,j≤k выполняется qi,j=pi,j.
Если условия равенства не выполняется, матрицы считаются неравными.

Входные данные
В первой строке входного файла содержатся два натуральных числа N и k - размеры исходной и нужной матрицы.
(1<=k<=N<=10). В следующих N строках заданы через пробел по N натуральных чисел ai,j - элементы исходной матрицы (1<=ai,j<10).

Выходные данные
В единственной строке выходного файла выведите одно число - количество способов выбрать из исходной матрицы две различные равные подматрицы размера k×k.
 

Примеры
Входные данные Выходные данные
1 3 1
1 2 3
4 5 6
7 8 9
0
2 3 1
1 1 1
1 1 1
1 1 1
36
3 3 2
1 2 1
1 1 2
1 1 1
1

1/ 0
ID 38790. Пропуск в общежитие - 1
Темы: Словари   

На входе в общежитие стоит турникет. Чтобы через него пройти, требуется приложить пропуск. Пропуск надо прикладывать и при входе в общежитие и при выходе из него. Для того, чтобы исключить несанкционированные проходы, пропуск не работает два раза подряд на вход и два раза подряд на выход.

Однако, хитрые студенты придумали, как обойти это ограничение. Чтобы войти или выйти вдвоем по одному пропуску, они прикладывают его с нужной стороны, потом с противоположной, но никто не проходит, а затем снова с нужной. 

Начальник охраны решил разобраться с данной проблемой и сделать выговоры всем нарушителям. По каждому событию входа/выхода есть запись в журнале событий. Он считает нарушителями тех владельцев пропусков, у которых произошло три события вида вход-выход-вход менее чем за dt минут.

Вам дан журнал событий турникета. Требуется вывести список тех студентов, кому будет сделан выговор

Входные данные
В первой строке задано два числа n и dt — число записей в журнале событий турникета и ограничение времени, выбранное начальником охраны, соответственно (1≤n≤1000, 3≤dt≤1440).
В следующих nn строках даны записи в журнале событий в хронологическом порядке. Запись в журнале состоит из трех частей, разделенных пробелом:

  •  Время события в формате hh:mm
  •  Фамилия студента, состоящая из не более чем 20 букв латинского алфавита, первая из которых заглавная.
  •  Тип события: in, если произошел вход и out, если произошел выход.

Гарантируется, что не существует двух событий, которые происходят одновременно. Также гарантируется, что у любых двух разных студентов разные фамилии и у одного студента не бывает двух событий одного типа подряд.


Выходные данные
В первой строке выведите число нарушителей. После чего выведите фамилии нарушителей в лексикографическом порядке.
 

Примеры
Входные данные Выходные данные
1 6 10
01:23 Petrov in
01:24 Ivanov out
01:25 Petrov out
01:27 Ivanov in
01:32 Petrov in
01:33 Ivanov out
1
Petrov
2 6 10
01:23 Petrov in
01:24 Ivanov out
01:25 Petrov out
01:27 Ivanov in
01:33 Petrov in
01:34 Ivanov out
0

63/ 9
ID 38789. Пропуск в общежитие - 2
Темы: Словари   

На входе в общежитие стоит турникет. Чтобы через него пройти, требуется приложить пропуск. Пропуск надо прикладывать и при входе в общежитие и при выходе из него. Для того, чтобы исключить несанкционированные проходы, пропуск не работает два раза подряд вход и два раза подряд на выход.

Однако, хитрые студенты придумали, как обойти это ограничение. Чтобы войти или выйти вдвоем по одному пропуску, они прикладывают его с нужной стороны, потом с противоположной, но никто не проходит, а затем снова с нужной.

Начальник охраны решил разобраться с данной проблемой и сделать выговоры всем нарушителям. По каждому событию входа/выхода есть запись в журнале событий. Он считает нарушителями тех владельцев пропусков, у которых произошло три события вида выход-вход-выход менее чем за dt минут.

Вам дан журнал событий турникета. Требуется вывести список тех студентов, кому будет сделан выговор.

Входные данные

В первой строке задано два числа n и dt — число записей в журнале событий турникета и ограничение времени, выбранное начальником охраны, соответственно (1≤n≤1000, 3≤dt≤1440).

В следующих nn строках даны записи в журнале событий в хронологическом порядке. Запись в журнале состоит из трех частей, разделенных пробелом:

  • Время события в формате hh:mm
  • Фамилия студента, состоящая из не более чем 20 букв латинского алфавита, первая из которых заглавная.
  • Тип события: in, если произошел вход и out, если произошел выход.

 

Гарантируется, что не существует двух событий, которые происходят одновременно. Также гарантируется, что у любых двух разных студентов разные фамилии и у одного студента не бывает двух событий одного типа подряд.

Выходные данные

В первой строке выведите число нарушителей. После чего выведите фамилии нарушителей в лексикографическом порядке.
 

Примеры
Входные данные Выходные данные
1 6 10
01:23 Petrov in
01:24 Ivanov out
01:25 Petrov out
01:27 Ivanov in
01:32 Petrov in
01:33 Ivanov out
1
Ivanov
2 6 10
01:23 Petrov in
01:24 Ivanov out
01:25 Petrov out
01:27 Ivanov in
01:33 Petrov in
01:34 Ivanov out
0

47/ 10
ID 38788. Свойства объектов - 2
Темы: Словари   

В хранилище Васи находится n объектов, пронумерованных от 1 до n, у каждого из которых есть некоторое количество свойств (возможно, ни одного). Каждое свойство представлено в виде натурального числа от 1 до 109.
Проанализировав устройство своего хранилища, Вася решил, что оно должно поддерживать две операции:
 -  Удаление устаревшего свойства c. При удалении свойства, оно удаляется у всех объектов, которым принадлежит. Если указанного свойства не существует, ничего делать не нужно.
 -  Найти количество удаленных свойств у объекта r
Васе очень нужно реализовать эту функциональность, и он обратился к вам за помощью. Помогите ему - напишите программу, которая будет поддерживать обе операции, нужные Васе.

Входные данные
В первой строке входного файле содержится число n - количество объектов в хранилище Васи (1 <= n <= 105). В i-й из следующих n строк содержится описание свойств объекта с номером i: сначала дано число ki - количество свойств у i-го объекта, а затем через пробел даны ki чисел pi,j - свойства i-го объекта (0 <= ki <= 100, 1 <= pi,j <= 109).
Все объекты пронумерованы от 1 до n в порядке, представленном во входных данных. Гарантируется, что общее количество свойств у всех объектов не превосходит 105. Также гарантируется, что для каждого i все pi,j различны.
В n + 2 строке содержится число q - количество запросов к хранилищу Васи (1 <= q <= 105).
В j-й из следующих q строк содержится информация об j-м запросе:
- c, если из хранилища требуется удалить устаревшее свойство c (1 <= c <= 109);
? r, если требуется найти количество оставшихся свойств у объекта с номером r.

Выходные данные
Для всех запросов на нахождение количества оставшихся свойств у объекта, в отдельных строках, в порядке их поступления для каждого запроса выведите это количество.
 

Примеры
Входные данные Выходные данные
1 2
3 1 2 4
3 2 3 5
12
- 1
? 1
? 2
- 2
? 1
? 2
- 5
? 1
? 2
- 6
? 1
? 2
1
0
2
1
2
2
2
2


Замечание
Свойство 1 есть только у первого объекта, поэтому после его удаления у первого объекта 1 удаленное свойство, а у второго все еще 0.
Свойство 2 есть у обоих объектов, поэтому оно удаляется у обоих объектов, у первого объекта теперь 2 удаленных свойства, а у второго 1.
Свойство 5 есть только у второго объекта, поэтому после его удаления у обоих объектов становится 2 удаленных свойства.
Свойства 6 нет ни у одного объекта, поэтому его удаление не меняет количество удаленных свойств у объектов.
 

4/ 2
ID 38787. Свойства объектов - 1
Темы: Словари   

В хранилище Васи находится n объектов, пронумерованных от 1 до n, у каждого из которых есть некоторое количество свойств (возможно, ни одного). Каждое свойство представлено в виде натурального числа от 1 до 109.
Проанализировав устройство своего хранилища, Вася решил, что оно должно поддерживать две операции:
 -  Удаление устаревшего свойства c. При удалении свойства, оно удаляется у всех объектов, которым принадлежит.
Если указанного свойства не существует, ничего делать не нужно.
 -  Найти количество оставшихся свойств у объекта с номером r.
Васе очень нужно реализовать эту функциональность, и он обратился к вам за помощью. Помогите ему - напишите программу, которая будет поддерживать обе операции, нужные Васе.

Входные данные
В первой строке входного файле содержится число n - количество объектов в хранилище Васи (1 <= n <= 105). В i-й из следующих n строк содержится описание свойств объекта с номером i: сначала дано число ki - количество свойств у i-го объекта, а затем через пробел даны ki чисел pi,j - свойства i-го объекта (0 <= ki <= 100, 1 <= pi,j <= 109).
Все объекты пронумерованы от 1 до n в порядке, представленном во входных данных. Гарантируется, что общее количество свойств у всех объектов не превосходит 105. Также гарантируется, что для каждого i все pi,j различны.
В n + 2 строке содержится число q - количество запросов к хранилищу Васи (1 <= q <= 105).
В j-й из следующих q строк содержится информация об j-м запросе:
- c, если из хранилища требуется удалить устаревшее свойство c (1 <= c <= 109);
? r, если требуется найти количество оставшихся свойств у объекта с номером r.

Выходные данные
Для всех запросов на нахождение количества оставшихся свойств у объекта, в отдельных строках, в порядке их поступления для каждого запроса выведите это количество.
 

Примеры
Входные данные Выходные данные
1 2
3 1 2 4
3 2 3 5
12
- 1
? 1
? 2
- 2
? 1
? 2
- 5
? 1
? 2
- 6
? 1
? 2
2
3
1
2
1
1
1
1

Замечание
Свойство 1 есть только у первого объекта, поэтому после его удаления у первого объекта остается 2 свойства, а у второго все еще 3.
Свойство 2 есть у обоих объектов, поэтому оно удаляется у обоих объектов, у первого объекта остается 1 свойство, а у второго - 2.
Свойство 5 есть только у второго объекта, поэтому после его удаления у обоих объектов остается 1 свойство.
Свойства 6 нет ни у одного объекта, поэтому его удаление не меняет количество свойств у объектов.
 

59/ 17
ID 38784. Ништячки юных программистов
Темы: Словари   

БЕСКОНЕЧНЫЙ ВВОД PYTHON?
На летних сборах по программированию за каждую решенную задачу давали некоторое количество фанфиков. В течении смены юные программисты могли тратить эти фанфики на покупку различных ништячков. По окончании смены у организаторов скопился большой список, каждая строка которого представляет собой запись вида Программист ништячок количество, где Программист имя юного программиста (строка без пробелов), ништячок - наименование купленного ништячка (строка без пробелов), количество — количество приобретенных единиц ништячка. 

Выведите обобщенный список, с указанием имени юного программиста и всех ништячков, которые он приобрел в течении смены и их количество.

Входные данные
Программа получает на вход набор строк в указанном в условии задачи формате.

Выходные данные
Выведите список всех покупателей в лексикографическом порядке, после имени каждого покупателя выведите, в круглых скобках, общее число приобретенных ништячков, затем, после двоеточия, выведите список названий всех приобретенных данным программистом ништячков в лексикографическом порядке, после названия каждого ништячка выведите количество единиц приобретенного ништячка. Информация о каждом ништячке выводится в отдельной строке.
 
Примеры
Входные данные Выходные данные
1
Ivanov paper 10
Petrov pens 5
Ivanov marker 3
Ivanov paper 7
Petrov envelope 20
Ivanov envelope 5
Ivanov:
envelope 5
marker 3
paper 17
Petrov:
envelope 20
pens 5

1/ 0
ID 38783. Запас продуктов - 2
Темы: Словари   

Знайка из Цветочного города изобрел ракету. Для полета на Луну было решено сделать запас некоторого количества различных продуктов. После опроса всех коротышек, у Знайки оказался на руках очень большой список, в котором записано пожелание каждого коротышшки в виде наименования продукта и количества упаковок. На собрании было решено, что не рационально брать с собой продукты, у которых суммарное количество упаковок меньше 50. Помогите коротышкам определить, запас каких продуктов делать не нужно. Выведите эти продукты в лексикографическом порядке (от a до z).

Входные данные
Программа получает список строк. Каждая строка содержит наименование продукта, затем через пробел идет количество упаковок, которое указал коротышка. Список заканчивается словом END!.

Выходные данные
Выведите наименование всех ненужных продуктов в лексикографическом порядке. Каждый продукт выводите в отдельной строке.
 

Примеры
Входные данные Выходные данные
1
cookies 10
cookies 50
syrup 9
syrup 8
cookies 1
apples 2
END!
apples
syrup

231/ 93
12