Є n ящиків, пронумерованих 1-n . Кожен ящик заблокований таким чином, що його можна відкрити лише одним відповідним типом ключа (також пронумерованим 1-n ). Ці клавіші випадковим чином розкидані по полях (один ящик може мати будь-яку кількість клавіш, один ключ може мати будь-яку кількість дублікатів), а потім усі поля закриваються. Скарб (пронумерований 0 ) також був заблокований у багатьох скриньках.
Ви найняли слюсаря, щоб отримати весь скарб. Він стягує плату за кожну скриньку, яку він розкриває. За відкриття коробки, для якої ключ уже є, плата не стягується.
Введення - це вміст кожного поля. Ви можете визначити формат введення.
Виведіть мінімальну вартість, необхідну для отримання скарбів.
Примітки
- Ваш алгоритм може зайняти багато часу, але це не має значення.
- Найкоротший код виграє.
- Недійсні введення не потрібно.
Зразок даних
Тут рядок i представляє ключі, наявні у вікні i .
Вхідні дані
2 0
3
4 0
5 6 0
6
0
Вихідні дані
1
Вхідні дані
2 0
3 0
4 0
6
5 0
Вихідні дані
3
Вхідні дані
2 4 0
3 0
1 0
6
5 0
Вихідні дані
2
Вхідні дані
1
3 4
2 6
5
Вихідні дані
0
[[1] [3 4] [] [] [2 6] [5]]
або , може бути {{1},{3,4},{},{},{2,6},{5}}
. Таким чином, більшість мов може звести читання вступу до чогось такого тривіального, як i=eval(read())
і зосередитись на цікавій частині виклику.