2165: Множини
Перегляд у форматі PDFЗверніть увагу, що у цій задачі вам, можливо, буде корисно використовувати Python 3.10 (PyPy) замість Python 3.13.
Нещодавно на лекції з лінійної алгебри Козак Вус дізнався про існування множин. Проте, посеред лекції Козаку Вусу набридло слухати далі, і він програв решту лекції в Stawl Brars. Тепер він не може виконати домашнє завдання на наступний урок, тому він просить вас йому допомогти. Домашнє завдання Козака Вуса виглядає наступним чином:
Є масив ~a~ з ~n~ різних цілих додатних чисел, який потрібно розбити на підмножини. Розбиття на підмножини вважається гарним, якщо кожне число з масиву належить рівно одній підмножині, а також якщо для будь-яких двох чисел з однієї підмножини одне з двох чисел є префіксом іншого. З усіх гарних розбиттів масиву на підмножини треба знайти таке, в якому кількість підмножин мінімальна.
Допоможіть Козаку Вусу зробити домашнє завдання. Якщо відповідей на завдання декілька, дозволяється вивести будь-яку з них.
Масив ~a~ називається підмножиною масиву ~b~, якщо ~a~ можна отримати шляхом видалення декількох (або нуля) будь-яких елементів з масиву ~b~, а також перестановки елементів в ньому. Наприклад, масиви ~[3, 1, 5]~, ~[1]~ та ~[1, 2, 3, 4, 5]~ є підмножинами масиву ~[1, 2, 3, 4, 5]~, а ~[1, 3, 10]~ або ~[1, 1, 2, 3]~ не є підмножинами масиву ~[1, 2, 3, 4, 5]~.
Число ~b~ є префіксом іншого числа ~c~, якщо існує таке ціле ~x \geq 0~, що якщо націло розділити ~c~ на ~10^x~, то вийде число ~b~. Більш формально, існує таке ціле ~x \geq 0~, що ~\lfloor{\frac{C}{10^x} \rfloor} =b~. Наприклад, число ~123~ є префіксом числа ~12345~, а числа ~234~ та ~13~ не є префіксами числа ~12345~.
Input
Перший рядок містить одне ціле число ~n~ (~1 \leq n \leq 10^5~) — довжина масиву ~a~.
Другий рядок містить ~n~ цілих чисел ~a_1, a_2, \dots, a_n~ (~1 \leq a_i \leq 10^{18}~) — елементи масиву ~a~.
Гарантується, що всі числа масиву ~a~ різні.
Output
У першому рядку вихідних даних виведіть одне ціле додатне число ~k~ — мінімальна можлива кількість підмножин у гарному розбитті.
Далі виведіть ~k\cdot2~ рядків:
У рядку з номером ~i\cdot2~ виведіть одне ціле число ~x_i~ — кількість чисел у ~i~-тій підмножині (~1 \leq i \leq k~).
У рядку з номером ~i\cdot2+1~ виведіть ~x_i~ цілих чисел — зміст ~i~-тої підмножини. Числа в цій множині можна виводити у будь-якому порядку.
Sample Input 1
5
2 318 3 21 31
Sample Output 1
2
3
318 31 3
2
21 2
Sample Input 2
5
1 100 1000 1001 130
Sample Output 2
3
3
1001 100 1
1
1000
1
130
Notes
У першому прикладі оптимальне розбиття виглядає наступним чином:
~\Large \color{green}{2}~, ~\Large \color{red}{318}~, ~\Large \color{red}{3}~, ~\Large \color{green}{21}~, ~\Large \color{red}{31}~
У зеленій підмножині:
- ~2~ є префіксом ~21~, оскільки ~\lfloor \frac{21}{10^1} \rfloor\ = 2~.
У червоній підмножині:
~3~ є префіксом ~318~, оскільки ~\lfloor \frac{318}{10^2} \rfloor\ = 3~.
~3~ є префіксом ~31~, оскільки ~\lfloor \frac{31}{10^1} \rfloor\ = 3~.
~31~ є префіксом ~318~, оскільки ~\lfloor \frac{318}{10^1} \rfloor\ = 31~.
У другому прикладі оптимальне розбиття виглядає наступним чином:
~\Large \color{blue}{1}~, ~\Large \color{green}{100}~, ~\Large \color{red}{1000}~, ~\Large \color{green}{1001}~, ~\Large \color{blue}{130}~
У зеленій підмножині:
- ~100~ є префіксом ~1001~, оскільки ~\lfloor \tfrac{1001}{10^1} \rfloor = 100~.
У червоній підмножині:
- ~1000~ не є префіксом жодного іншого числа в цій підмножині.
У синій підмножині:
- ~1~ є префіксом ~130~, оскільки ~\lfloor \tfrac{130}{10^2} \rfloor = 1~.
Ви отримаєте не менше ~20~ балів, якщо ваш розв'язок буде коректно працювати для ~n \leq 18~.
Ви отримаєте не менше ~40~ балів, якщо ваш розв'язок буде коректно працювати для ~n \leq 500~.
Коментарі
Увага! Чекер автора поки не налаштований і тому працює стандартний чекер