Співпадіння найдовшого префікса
В інтернеті маршрутизатор пересилає пакети на основі їхньої адреси призначення, використовуючи таблицю маршрутизації. Ця таблиця визначає шлях для кожної адреси призначення (якщо такий існує), яким має бути відправлений пакет. Адреса призначення — це 32-бітове беззнакове ціле число. У таблиці маршрутизації міститься багато різних префіксів (тисячі), кожен з яких представлений кортежем (m, l), де m — це маска адреси (беззнакове ціле число), а l — довжина, що вказує на кількість значущих бітів у масці. Адреса призначення d відповідає префіксу (m, l), якщо l старших бітів d збігаються з l старшими бітами m.
Збіг найдовшого префікса: коли надходить пакет даних, маршрутизатор повинен знайти у своїй базі найдовший префікс, що збігається з адресою призначення пакета. Вам потрібно реалізувати алгоритм для визначення найдовшого збігаючого префікса для маршрутизатора, який обробляє кілька мільйонів пакетів.
Вхідні дані
Перший рядок містить два цілі числа x (x ≤ 10000) і y. x вказує на кількість префіксів у таблиці маршрутизації, а y — на кількість пакетів, що передаються. Наступні x рядків описують префікси: кожен рядок задає один префікс у вигляді шістнадцяткової маски (що містить не більше 32 біт), за якою слідує її довжина len (0 < len ≤ 32) у десятковій системі. Кожен префікс ідентифікується числом, що дорівнює номеру рядка, в якому він з'являється, мінус один (тобто перший префікс має id 0, другий — 1, і так далі). Наступні y рядків задають адреси призначення, куди пакети повинні бути доставлені, по одному пакету в кожному рядку (адреси також задаються у шістнадцятковому форматі).
Вихідні дані
Виведіть y рядків. Рядок k містить результат порівняння найдовшого префікса для k-ої вхідної адреси. Результатом є або ідентифікатор найдовшого збігаючого префікса, або -1, якщо збіг не знайдено.